Espansione serverfarm: siglato accordo per raddoppio banda!


1 utente stanno visualizzando questa discussione: (0 membri, e 1 visitatore).
 
Valutazione discussione:
  • 0 voti - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Modulo da sito
18-11-2009, 20:35 (Questo messaggio è stato modificato l'ultima volta il: 18-11-2009 20:37 da SbiellONE.)
Messaggio: #11
RE: Modulo da sito
Ciao Elisabetta,

Secondo me dovresti elaborare il modulo prima di qualsiasi riga di HTML e mettere un exit(); dopo l'header.
In mezzo all'html lascia solo la stampa di eventuali errori.

L'alternativa è l'utilizzo dell'output buffering ma mi pare macchinoso visto che basta spostare un po' di codice in cima.

Spero di essere stato chiaro.
Visita il sito web di questo utente Trova tutti i messaggi di questo utente
18-11-2009, 20:51
Messaggio: #12
RE: Modulo da sito
Ciao Sbiellone, grazie mille per l'aiuto.

Ho provato a lasciare solo il codice dello script, ossia quello incluso tra
<?php e ?>
Eliminando tutto il resto.

Ho inserito exit(); poco prima di ?>

Però non funziona lo stesso.
Ho capito bene oppure ho fatto qualche errore ?

Il mio nuovo sito hosted by w4w: elisabettaricci.it: http://www.elisabettaricci.it
La mia associazione occhiettineri.it: http://www.occhiettineri.it
Visita il sito web di questo utente Trova tutti i messaggi di questo utente
18-11-2009, 23:46
Messaggio: #13
RE: Modulo da sito
Ciao Elisabetta.
La pagina che hai 'screenshottato' non potrà mai funzionare.
Il comando "header" che usi per fare il redirect invia degli header al server ovvero delle intestazioni e le intestazioni devono essere inviate prima di ogni altra cosa.

Tu in quella pagina hai 10-15 righe di html più altro output e solo alla fine hai l'header. Non potrà mai funzionare.

O riprogetti per intero la pagina, oppure usi un redirect javascript o html come quello che hai indicato. Il risultato è lo stesso.

Se deve reindirizzare un browser, puoi usare tranquillamente anche il parametro refresh, il "Location" tramite header non avrebbe alcun vantaggio.

Per evitare la pagina bianca potresti mettere "0" anzichè "1" come intervallo di refresh, ma non son sicuro che funzioni. Gli esperti di HTML quà dentro sono gli altri, io ti posso aiutare con PHP, ma con l'HTML non vado molto d'accordo.

(come consiglio generale, metti sempre un exit() o un die() subito sotto il redirect, in quanto molti spider/robot/script non lo seguirebbero pertanto leggerebbero ugualmente il resto della pagina. In poche parole, non fare affidamento al redirect per nascondere del testo, sarebbe facilmente bypassabile, se invece ci metti un die() uccidi lo script ed è impossibile che un robot possa leggere il resto della pagina. Spero di essermi spiegato)

:alcool::alcool: :adminpower: :alcool::alcool:

Web4Web.IT - Low Cost Hosting
Pacchetti multidominio a partire da € 10,00
Visita il sito web di questo utente Trova tutti i messaggi di questo utente
19-11-2009, 00:00 (Questo messaggio è stato modificato l'ultima volta il: 19-11-2009 00:01 da Pirosauro.)
Messaggio: #14
RE: Modulo da sito
exit() messo così alla fine non serve a nulla, come il @ davanti ai comandi del resto, che evita solo di mostrare il warning, ma non di eseguire correttamente lo script.

la soluzione, oltre alla riscrittura del codice Big Grin, è l'uso di un trucchetto: l'output buffer (nota la prima e l'ultima riga).
Codice PHP:
<?php ob_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Documento senza titolo</title>
</head>

<body><?php

// $mail_to and $mail_from must be set.

$mail_to '[email protected]'// Who is the E-Mail going to?
$mail_from '[email protected]'// Where does the E-Mail appear to be from?

// OPTIONAL SETTING
$redirect_url 'http://www.ilmiosito.it/grazie.php'// Example: http://domain.com/thankyou.html - must be a FULL URL.

############################
# DO NOT EDIT BELOW THIS #
############################

// Fail if _POST and _GET are empty. Nothing to process.
if(count($_POST) == AND count($_GET) == 0):
echo 
'This form handler does nothing if visited directly. You must submit form data to this script.';
exit;
endif;

// Fail if $mail_to or $mail_from are not set.
if(empty($mail_to) OR empty($mail_from)):
echo 
'You must edit this script and set the appropriate values for $mail_to and $mail_from.';
exit;
endif;


// Set $fields to whichever method is being used.
$fields = (count($_POST) > ) ? $_POST $_GET;

$message_body "Modulo 2010 \n\n";

foreach (
$fields as $field => $value):
switch(
strtolower($field)):
case 
'redirect':
$redirect $value;
break;
case 
'subject':
$subject $value;
break;
endswitch;
if (
strtolower($field) != 'redirect' AND strtolower($field) != 'submit' AND strtolower($field) != 'subject'):
$message_body .= strtoupper($field) . ": " $value "\r\n";
endif;
endforeach;

// Set the redirect URL from the form (if set). $host_url is a default action if $redirect isn't set
$redirect = (empty($redirect_url)) ? $redirect $redirect_url;
$host_url $_SERVER['HTTP_HOST'];

// Set the message subject based upon a subject field being set or not.

$message_subject = (!empty($subject)) ? $subject 'Modulo 2010 ';

$headers 'From: '.$_POST['email']."\r\n";
'Reply-To: ' .$_POST['email']. "\r\n";
'X-Mailer: PHP/' phpversion();

// Remove potentially injected headers from the body

if (!mail($mail_to$message_subject$message_body$headers)):
echo 
"Message Send Failed.";
endif;

if(empty(
$redirect)):
header("Location: http://{$host_url}");
else:
header("Location: {$redirect}");
endif;
?>
</body>
</html>
<?php ob_end_flush(); ?>

un'ultima cosa: lo script è vulnerabile alle e-mail injection, ad Alessandro non farà piacere Big Grin Big Grin

[email protected] ha i poteri della super mucca
________
: http://it.linkedin.com/in/pirosauro - Website (offline)
Visita il sito web di questo utente Trova tutti i messaggi di questo utente
19-11-2009, 00:05 (Questo messaggio è stato modificato l'ultima volta il: 19-11-2009 00:06 da Gandalf.)
Messaggio: #15
RE: Modulo da sito
Pessima idea l'output buffering in questa situazione.
Lo script è semplicemente progettato male e va rifatto, l'output buffering è come una sorta di "@" ti fa funzionare lo script, ma sarebbe il caso di ripensarlo exnovo.

Come c'è finito un redirect tramite header HTTP in fondo alla pagina?
Ci deve essere un errore concettuale.

Se devi usare gli header HTTP, come ad esempio in una pagina di transito, allora non dovresti avere output, se invece devi avere output sarebbe meglio usare un redirect javascript.

Per quanto riguarda le e-mail injection, no, non mi fa affatto piacere.
Tutti sanno la nostra polita di tolleranza zero contro lo spam (distacco immediato del sito), per cui meglio prevenire che curare Big Grin Big Grin

MAI E POI MAI PASSARE UN INDIRIZZO MAIL TRAMITE PARAMETRI (get, post, o altre cose in cui un utente possa manipolare tale indirizzo a piacere)

:alcool::alcool: :adminpower: :alcool::alcool:

Web4Web.IT - Low Cost Hosting
Pacchetti multidominio a partire da € 10,00
Visita il sito web di questo utente Trova tutti i messaggi di questo utente
19-11-2009, 00:20 (Questo messaggio è stato modificato l'ultima volta il: 19-11-2009 00:27 da Pirosauro.)
Messaggio: #16
RE: Modulo da sito
(19-11-2009 00:05)Gandalf Ha scritto:  : https://www.web4web.it/forum/post-455.html#pid455Pessima idea l'output buffering in questa situazione.
Lo script è semplicemente progettato male e va rifatto, l'output buffering è come una sorta di "@" ti fa funzionare lo script, ma sarebbe il caso di ripensarlo exnovo.
appunto è un fix (brutto, ma lo è), purtroppo una pratica molto usata Big Grin ho visto certi orrori in giro ... Angel
Facciamo così: se Elisabetta non ha fretta, potrei riscrivere il codice domani in serata, in 10 minuti dovrei cavarmela.

(19-11-2009 00:05)Gandalf Ha scritto:  : https://www.web4web.it/forum/post-455.html#pid455Per quanto riguarda le e-mail injection, no, non mi fa affatto piacere.
Tutti sanno la nostra polita di tolleranza zero contro lo spam (distacco immediato del sito), per cui meglio prevenire che curare Big Grin Big Grin
allora previeni, niente mail da php Big Grin

(19-11-2009 00:05)Gandalf Ha scritto:  : https://www.web4web.it/forum/post-455.html#pid455MAI E POI MAI PASSARE UN INDIRIZZO MAIL TRAMITE PARAMETRI (get, post, o altre cose in cui un utente possa manipolare tale indirizzo a piacere)
sei paranoico Big Grin basta ripulirlo per bene. Tutti gli input sono potenzialmente pericolosi, se seguissimo il tuo consiglio non dovremmo usare php Big Grin

[email protected] ha i poteri della super mucca
________
: http://it.linkedin.com/in/pirosauro - Website (offline)
Visita il sito web di questo utente Trova tutti i messaggi di questo utente
19-11-2009, 00:24
Messaggio: #17
RE: Modulo da sito
Be si, ho dimenticato di dire: "mai usare quelle variabili se non ripulite a dovere", ma pensavo fosse sotto-inteso.

:alcool::alcool: :adminpower: :alcool::alcool:

Web4Web.IT - Low Cost Hosting
Pacchetti multidominio a partire da € 10,00
Visita il sito web di questo utente Trova tutti i messaggi di questo utente
19-11-2009, 20:56
Messaggio: #18
RE: Modulo da sito
come promesso, ho buttato giù qualche riga di codice.
Non l'ho provato a fondo ed è possibile che qualche bug/svista sia presente. Quindi, a fronte del suo libero utilizzo, lo rilascio con la formula "as it", senza garanzie di sorta. Se avete richieste, dubbi o poposte, postatele pure... nel possibile, vedrò di accontentarvi.
Infine, un link a ToyTomato.net: http://toytomato.net è gradito, ma non obbligatorio.


Codice PHP:
<?php

$mail_to     
=    '';
$thanks_url     =    '';

@
date_default_timezone_set'Europe/Rome' );

//----------------------------------------

error_reporting);

if( ( 
count$_POST ) + count$_GET ) ) == )
    die( 
'This form handler does nothing when visited directly. You must submit form data to this script.' );

if( empty( 
$mail_to ) || !filter_var$mail_toFILTER_VALIDATE_EMAIL ) )
    die( 
'You must edit this script and set the appropriate values for $mail_to.' );

$fields     =    count$_POST ) > array_change_key_case $_POSTCASE_LOWER ) : array_change_key_case $_GETCASE_LOWER ); 
$fields     =    array_map'urldecode'$fields );
$fields     =    array_map'trim'$fields );

if( isset( 
$fields['redirect'] ) && !empty( $fields['redirect'] ) ) {
    if( 
filter_var$fields['redirect'], FILTER_VALIDATE_URLFILTER_FLAG_SCHEME_REQUIRED ) )
        
$redirect     =    filter_var$fields['redirect'], FILTER_SANITIZE_URL );
    else
        die( 
'Redirect value appears to be an invalid URL.' );
} else if( !empty( 
$thanks_url ) && filter_var$thanks_urlFILTER_VALIDATE_URLFILTER_FLAG_SCHEME_REQUIRED ) ) {
    
$redirect     =    $thanks_url;
}

if( isset( 
$fields['subject'] ) && !empty( $fields['subject'] ) && !strpos$fields['subject'], "\n" ) )
    
$subject     =    filter_var$fields['subject'], FILTER_SANITIZE_STRINGFILTER_FLAG_STRIP_LOW FILTER_FLAG_STRIP_HIGH );
else
    
$subject     =    date'r' );

if( isset( 
$fields['email'] ) && !empty( $fields['email'] ) && !strpos$fields['email'], "\n" ) && filter_var$fields['email'], FILTER_VALIDATE_EMAIL ) )
    
$address     =    filter_varurldecode$fields['email'] ), FILTER_SANITIZE_EMAIL );
else
    die( 
'Your email address doesn\'t appear to be valid.' );

if( isset( 
$fields['name'] ) && !empty( $fields['name'] ) && !strpos$fields['name'], "\n" ) )
    
$username     =    filter_var$fields['name'], FILTER_SANITIZE_STRINGFILTER_FLAG_STRIP_LOW FILTER_FLAG_STRIP_HIGH );
else
    
$username     =    $address;

unset( 
$fields['redirect'], $fields['subject'], $fields['email'], $fields['name'] );

$headers     =    array(
    
'From: ' $username ' <' $address '>',
    
'Reply-To: ' $address,
    
'X-Mailer: PHP/' phpversion()
);

$message     =    '';

foreach( 
$fields as $key => $value )
    
$message    .=    ucfirst$key ) . ': ' filter_var$valueFILTER_SANITIZE_STRINGFILTER_FLAG_ENCODE_LOW FILTER_FLAG_ENCODE_HIGH ) . "\r\n";

if( [email protected]
mail$mail_to$subject$messageimplode"\r\n"$headers ) ) )
    die( 
'Message send failed.' );
else if( isset( 
$redirect ) )
    
header'Location: ' $redirect );
else
    echo 
'Your message has been sent.';

?>

Il funzionamento è analogo a quello postato da Elisabetta, ma con maggiori misure di sicurezza, atte a prevenire spam in uscita.
Gli unici parametri da settare sono in testa allo script e sono le variabili $email_to e $thanks_url, di cui solo la prima obbligatoria.
In $email_to, mettete il vostro indirizzo email, quello a cui volete vengano inviati tutti i messaggi.
$thanks_url serve se volete che l'utente venga indirizzato ad una certa pagina, dopo l'invio (con successo) della mail. In alternativa potete passare il valore "redirect" in query. Entrambi devono essere URL complete tipo http://tuosito.tld
I dati da passare sono:
email: indirizzo email dell'utente (obbligatorio)
name: nome utente (facoltativo)
subject: oggetto del messaggio (facoltativo, se non presente verrà usata la data)
redirect: pagina dove re-indirizzare l'utente una volta inviato il messaggio (facoltativo)
Tutti gli altri valori verranno inseriti nel corpo del messaggio
Ultima nota: funziona sia che passiate i dati in GET che in POST

Credo sia tutto, buon divertimento Big Grin

[email protected] ha i poteri della super mucca
________
: http://it.linkedin.com/in/pirosauro - Website (offline)
Visita il sito web di questo utente Trova tutti i messaggi di questo utente
19-11-2009, 21:31
Messaggio: #19
RE: Modulo da sito
Ma chi fa quei bei disegnini?

:alcool::alcool: :adminpower: :alcool::alcool:

Web4Web.IT - Low Cost Hosting
Pacchetti multidominio a partire da € 10,00
Visita il sito web di questo utente Trova tutti i messaggi di questo utente
19-11-2009, 21:32 (Questo messaggio è stato modificato l'ultima volta il: 19-11-2009 21:32 da Pirosauro.)
Messaggio: #20
RE: Modulo da sito
quali disegnini?

edit: quelli su toytomato? Giulia!

[email protected] ha i poteri della super mucca
________
: http://it.linkedin.com/in/pirosauro - Website (offline)
Visita il sito web di questo utente Trova tutti i messaggi di questo utente


Altri utenti che stanno visualizzando questa discussione

1 utente stanno visualizzando questa discussione: (0 membri, e 1 visitatore).
 
Discussioni correlate...
Discussione: Autore Risposte: Letto: Ultimo messaggio
  Nuovo sito PHP peppe20x 1 11.254 18-12-2009 02:03
Ultimo messaggio: Gandalf
 
Vai al forum:


Permessi di scrittura
Non puoi inserire nuove discussioni.
Non puoi inserire risposte.
Non puoi inserire allegati.
L' HTML è disattivato.
Il MyCode è attivato.
Le faccine sono attivato.
Il codice [img] è attivato.