Come controllare un'applicazione web tramite e-mail?O come eseguire lo script php inviando un'e-mail?

StackOverflow https://stackoverflow.com/questions/46777

  •  09-06-2019
  •  | 
  •  

Domanda

Voglio eseguire un'applicazione web su php e mysql, utilizzando il framework CakePHP.E per mantenere la soglia di utilizzo del sito a un livello molto basso, non voglio utilizzare l'accesso standard con nome utente/password.(E non voglio nemmeno infastidire i miei utenti con qualcosa come OpenID.Va al tipo di utente.)

Quindi penso che gli utenti potranno accedere inviando un'e-mail a login@domain.com senza oggetto o contenuto richiesto.E riceveranno, in risposta, un'e-mail con un collegamento che li consentirà di accedere (conterrà un hash).Inoltre lascerò che gli utenti eseguano alcune azioni senza nemmeno visitare il sito, basta inviare un'e-mail con command@domain.com e il comando verrà eseguito.Darò per scontato che gli utenti e i loro provider di posta elettronica si prendano cura della sicurezza del loro account di posta elettronica e come tale non ce n'è bisogno sul mio sito.

Ora, come posso passare dall'invio di un'e-mail a un account che non viene letto dagli esseri umani all'attivazione di uno script (sostanzialmente un "client browser fittizio" chiama un URL (e cakephp si prenderà cura del resto)?


Non ho mai utilizzato un lavoro cron prima, ma penso di aver compreso il loro scopo o come funzionano generalmente.Non posso fare in modo che lo script venga chiamato da persone a caso che visitano il sito, poiché tale soluzione non funzionerà per diversi motivi.Penso che mi piacerebbe saperne di più sulla possibilità di eseguire lo script in risposta a un'e-mail in arrivo, se qualcuno ha qualche input al riguardo.Se viene eseguito come processo cron, controllerà solo ogni X minuti e gli utenti riceveranno un ritardo nella risposta (se ho capito bene).

Poiché ci saranno indirizzi email diversi per comandi diversi, come login@dominio.com e sappiamo cosa fare e come farlo in base all'e-mail del mittente, non ho nemmeno bisogno del contenuto, dell'oggetto o di altre intestazioni dell'e-mail.


C'è molta preoccupazione per la sicurezza di questa applicazione, capisco i problemi, ma senza rivelare il mio concetto, non penso che sia un grosso problema per quello che sto facendo.Anche per quanto riguarda il problema dell'usabilità, in realtà non ce n'è.Sarà sufficiente effettuare l'accesso per fornire modifiche al profilo di un utente se/quando ne avranno bisogno e un altro comando.E questa è l'e-mail principale ed è molto facile da ricordare e rappresenta l'inizio dell'intero concetto.

È stato utile?

Soluzione

Ho usato il classe php pop3 con grande successo (esiste anche a Modulo POP3 pera).

L'utilizzo della classe pop3 è simile a questo:

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);
}

Lo uso per monitorare una casella di posta POP3 che alimenta un database.

Viene chiamato da un cronjob che usa wget per chiamare l'URL del mio script php.

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

Modificare

Ho pensato alla tua necessità che gli utenti inviino determinati comandi del sito tramite e-mail.

Non sarebbe più semplice avere un unico indirizzo a cui inviare più comandi piuttosto che avere più indirizzi?

Penso che anche le preoccupazioni sulla sicurezza siano abbastanza valide.A meno che i comandi non siano distruttivi o non facciano nulla di specifico dell'utente, il sistema sarà completamente aperto a chiunque sappia come falsificare un indirizzo email (che sarebbero tutti :)).

Altri suggerimenti

Avrai bisogno di una sorta di servizio CronJob/Timer che controlli regolarmente la casella di posta e poi agisca su di essa.In alternativa, dovresti controllare il server di posta se può eseguire uno script quando arriva un'e-mail (ad es.vedi se è possibile inserire uno script di filtro antispam e "abusare" di quella funzionalità per chiamare invece il tuo script).

Con PHP puro, sei per lo più sfortunato perché qualcosa deve attivare lo script.Su una pagina con MOLTO traffico, potresti avere il tuo indice.php o qualsiasi altra cosa esegua il controllo, ma quando nessuno visita il tuo sito per un bel po' di tempo, la posta non verrà inviata e devi stare attento alla "corsa conditions" quando più persone accedono allo script contemporaneamente.

Modificare: Tieni a mente solo un difetto di usabilità:Persone con più PC e senza client di posta elettronica su ognuno.Ad esempio, io utilizzo 4 PC, ma solo 1 (il mio principale) ha un client di posta installato e utilizzo Webmail per controllare gli altri.Ora, accedere e inviare un'e-mail tramite Webmail non è la massima usabilità: per utilizzare il TUO sito, devo prima accedere a UN ALTRO sito, comporre un'e-mail tramite l'interfaccia scadente della maggior parte degli strumenti Webmail e attendere la risposta.Potresti anche usare OpenID lì :-)

Se il tuo server lo consente, puoi utilizzare a .inoltrare file o Procmail per avviare un processo (php o altro) quando arriva una mail ad un determinato indirizzo.

Non vuoi infastidire gli utenti con OpenID, ma vuoi che si occupino di questo schema di posta elettronica.Innanzitutto, l'invio della posta elettronica può richiedere molto tempo.Non esiste un orario garantito in cui un'e-mail verrà consegnata.Non è nemmeno garantito che l'e-mail arrivi a destinazione.So che di solito le cose sono veloci, ma non è raro che siano necessari fino a 10 minuti per completare un viaggio di andata e ritorno.Inoltre, a meno che tu non stia crittografando l'e-mail, il collegamento che stai inviando viene inviato allo scoperto.Ciò significa che chiunque può utilizzare quel collegamento per accedere.A seconda di quanto vuoi essere sicuro, questo potrebbe essere o meno un problema, ma è sicuramente qualcosa a cui pensare.Usare un metodo di accesso non standard come questo richiederà molto più lavoro di quanto probabilmente valga e non riesco davvero a vedere alcun vantaggio nell'intero processo.

Stavo anche pensando di usare procmail per avviare qualche script.C'è anche formail, che potrebbe tornare utile per modificare o estrarre intestazioni.Se disponi dell'accesso amministrativo al server di posta, puoi anche utilizzare /etc/aliases e collegarlo semplicemente al tuo script.

Oltre ai problemi di usabilità, dovresti davvero pensare alla sicurezza: in realtà è abbastanza semplice inviare e-mail con un indirizzo di mittente falso, quindi non farei affidamento su di esso per nulla di critico.

Sono d'accordo con tutte le preoccupazioni sulla sicurezza.La tua ipotesi secondo cui "gli utenti e i loro provider di posta elettronica si prendono cura della sicurezza del loro account di posta elettronica" non è corretta quando si tratta dell'indirizzo e-mail del mittente.

Ma poiché hai chiesto specificamente "come posso passare dall'invio di un'e-mail a un account che non viene letto dagli esseri umani all'attivazione di uno script", consiglio di utilizzare procmail per consegnare l'e-mail in arrivo a uno script che scrivi.

Non chiamerei un URL.Vorrei che lo script eseguisse il lavoro leggendo il messaggio inviato su stdin.In questo modo, lo script non sarà accessibile a nessuno sul sito web.

Per impostare questo, l'indirizzo e-mail fornito ai tuoi utenti dovrà essere associato a un vero utente sul sistema.Nella directory home di quell'utente, crea un file chiamato ".procmailrc"

In quel file, aggiungi queste due righe:

:0 hb:
| /path/to/program

Dove/percorso/a/programma è il percorso completo dello script o del programma per la gestione del messaggio in arrivo.Quindi crea lo script con un codice simile a questo:

#!/usr/bin/php
<?php

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

?>

Il messaggio di posta elettronica non rimarrà nella casella di posta, quindi se desideri salvarlo o registrarlo, chiedi allo script di farlo.

--
Bruce

Riconsidererei seriamente questo approccio.La posta elettronica non ha un'affidabilità molto elevata.Esistono tutti i tipi di filtri antispam che potrebbero intercettare le e-mail con collegamenti rendendo così il "comando" incompleto, per non parlare dei rischi per la sicurezza.

È molto semplice falsificare l'indirizzo del mittente in un'e-mail.Fondamentalmente stai aprendo il tuo sistema a chiunque.

Inoltre, invece di una combinazione nome utente/password, improvvisamente chiedi agli utenti di ricordare un elenco di comandi da inserire davanti a un indirizzo email.Sarebbe meglio fornire loro un nome utente/password e poi dare accesso a una pagina di aiuto.

In altre parole, l’usabilità e la sicurezza di questo schema hanno un punteggio molto basso.

Non riesco davvero a trovare alcun vantaggio in questo approccio che si avvicini anche solo a superare gli enormi svantaggi.

Una soluzione per prevenire lo spam è assicurarsi che la prima riga, l'ultima riga o una riga specifica contenga una determinata stringa, quasi come una password, ma è meglio una frase intera.

Solo tu hai la parola o le parole, abbastanza sicure, ricorda solo di eliminare le mail dopo l'uso e quelle che non hanno la linea segreta.

A parte la sicurezza e l'usabilità, la consegna della posta elettronica può essere un altro problema.A seconda del provider di posta elettronica dell'utente, la consegna della posta elettronica può subire ritardi da pochi minuti ad alcune ore.

C'è una storia educativa davvero carina su thedailywtf.com sulla progettazione del software.La questione posta dovrebbe essere risolta con una progettazione adeguata, non con il techo-woopla.

Alexander, per favore leggi la storia collegata e pensa ai guanti, non alla navigazione di pagine web guidata dalla posta elettronica.

PHP non è un martello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top