Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

redirect na uitvoer extern php-script

Pagina: 1
Acties:

  • Tweaker36
  • Registratie: Juni 2007
  • Laatst online: 18-09 08:25
Hallo,

In de header van mijn site komt een klein formuliertje met de mogelijk tot het aan en afmelden voor de nieuwsbrief. Er is dus een tekstvak, en 2 knoppen aanwezig.
Als je op de ene knop druk, wordt er een mail verstuurd met de boodschap "ingegeven@mailadres.be wil zich aanmelden" en de andere knop dat die zich wil afmelden. Na succesvolle berichtgeving krijg je nog een javascript box ( alert('') ) met de melding dat alles goed gegaan is, of anders dat het misgelopen is.

Als de php code op de pagina zelf staat, werkt het prima.
Maar omdat da tformulier op alle pagina's komt, heb ik de code in een extern bestandje gezet.

Als je je dan aanmeldt, krijg je de box met het bericht dat alles succesvol was, een een lege pagina . Die lege pagina zou dus de originele pagina moet zijn, maar dat krijg ik niet gefixt.

De huidige code van Index.php:

Het forumulier:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!--header -->
<div id="header">           
    <h1 id="logo-text"><a href="Index.php" title="">Aromatheek</a></h1>     
    <p id="slogan">Speciaalzaak aromatherapie &amp; voetreflexologie.</p>       

    <div id="nieuwsbrief">
    <form id="form" name="form1" method="post" action="Index.php">
      <label>Nieuwsbrief? email-adres:
        <input name="mail" type="text" id="mail" size="28" />
        <input type="submit" name="aan" id="aan" value="Aanmelden" />
        <input type="submit" name="af" id="af" value="Afmelden" />
      </label>
    </form>
    </div>
<!--header ends-->

De handler:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
if(isset($_POST['mail'])){
    $mail = $_POST['mail'];
    if(isset($_POST['aan']))$signup = true;
        else $signup = false;
    
    if(strpos($mail, "@") === FALSE){
     echo "<script language='javascript'>alert('Gelieve uw email adres in te vullen!');</script>";
    }else{
    
    $to      = 'naameffegewist@aromatheek.be';
    $subject = 'Nieuwsbrief site';
    $headers = 'From: '.$mail;
    if($signup) $message = "'$mail' wilt zich aanmelden voor de nieuwsbrief! :) \n";
        else $message = "'$mail' wilt zich afmelden van de nieuwsbrief... :( \n";
    $message .= "Datum : ".date(DATE_RFC822)."\n";
    $message .= "IP : ".$_SERVER['REMOTE_ADDR']."\n";
    
    $m_info = "SENT";
    $mail_ok = TRUE;
    
    if(!mail($to, $subject, $message, $headers)){
        $m_info = "NOT SENT!!";
        $mail_ok = FALSE;
    }
    $fp = @fopen("./archief_secret.txt","a");
    if($fp != FALSE){
        @fwrite($fp,$message."EMAIL : $m_info\n\n\n");
        fclose($fp);
    }else{print("deze tekst komt op die witte pagina te staan, die de originele pagina zou moeten zijn.\n<br />");}
    if($mail_ok){
     echo "<script language='javascript'>alert('U bent succesvol aan- of afgemeld!');</script>";
    }else{
     echo "<script language='javascript'>alert('Er is iets misgelopen. Probeer het nog eens, aub.');</script>";
    }
    }
}
?>

Ik had dus de handler opgeslagen ( nieuwsbrief.php ) en dan bij mijn formuliertje action="index.php" veranderd in action="nieuwbrief.php" ...

Ik wou dan proberen redirecten met de volgende redirect:
code:
1
2
3
4
5
<script type="text/javascript">
<!--
window.location = "http://www.waarjemaarheenwil.be/"
//-->
</script>

(wel met de nodige \ gewerkt)

! De code zoals hier gegeven, zo staat alles op index.php en werkt alles probleemloos.
Maar dus niet als je het extern maakt...

Iemand die me kan helpen?

Alvast bedankt.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Redirecten doe je op HTTP-niveau:
PHP:
1
2
header('Location: http://www.mydomain.tld/dank-voor-contact.html');
die;

Verder wil je echt geen Javascript alert boxes tonen voor iets triviaals als dit. Gewoon in HTML houden.

[ Voor 29% gewijzigd door curry684 op 27-06-2008 00:14 ]

Professionele website nodig?


  • Tweaker36
  • Registratie: Juni 2007
  • Laatst online: 18-09 08:25
Maar hoe verwerk ik die redirect dan daarin?

  • Tweaker36
  • Registratie: Juni 2007
  • Laatst online: 18-09 08:25
Niemand die kan helpen? ;(

Een vriend van me heeft dit stukje code geschreven, maar dit probleem kan ie niet oplossen...
Ikzelf ken maar een klein beetje php (genoeg om te verstaan wat er staat, maar nog niet genoeg om zelf code te schrijven :| )...

  • mithras
  • Registratie: Maart 2003
  • Niet online
curry684 geeft toch al het antwoord? Met php kan je headers sturen, zodat je op HTTP niveau een redirect uitvoert. Dat is precies wat curry684 zegt :)

  • Tweaker36
  • Registratie: Juni 2007
  • Laatst online: 18-09 08:25
mithras schreef op zondag 29 juni 2008 @ 10:39:
curry684 geeft toch al het antwoord? Met php kan je headers sturen, zodat je op HTTP niveau een redirect uitvoert. Dat is precies wat curry684 zegt :)
Maar ik heb geen flauw idee hoe ik dat stukje code van curry684 in mijn handler moet opnemen...

Zal wel ergens bij deze regel moeten zijn:
R30: }else{print("deze tekst komt op die witte pagina te staan, die de originele pagina zou moeten zijn.\n<br />");}

Ik heb daar al die redirect-code ingezet, die else weggelaten,... maar niks dan parse-errors... ;(

  • Mad Marty
  • Registratie: Juni 2003
  • Laatst online: 13:15

Mad Marty

Je bent slimmer als je denkt!

Je moet dat stukje code opnemen waar je je redirect wilt laten plaatsvinden 8)7

Wat voor errors krijg je dan en waarom lukt het niet die op te lossen / wat snap je er niet aan?

Zie ook http://nl.php.net/manual/en/function.header.php (had je natuurlijk ook zelf op kunnen zoeken...)

[ Voor 22% gewijzigd door Mad Marty op 29-06-2008 11:08 ]

Rail Away!


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Tweaker36 schreef op zondag 29 juni 2008 @ 11:02:
Ik heb daar al die redirect-code ingezet, die else weggelaten,... maar niks dan parse-errors... ;(
Parse errors zijn eenvoudig op te lossen door gewoon een editor met syntax highlighting te gebruiken en in de buurt van de fout te kijken.

Als je een 'headers already sent' fout krijgt is die ook eenvoudig op te lossen, want deze fout zegt al waar de output gestart was. Bovendien is het de meest gemaakte fout bij gebruik van de header() call, dus er is echt meer dan genoeg over geschreven.

Wellicht kan (verder gaan met) een PHP tutorial ook geen kwaad. Je hebt een paar gruwelijke security problemen, dus je kan maar beter niet een link naar deze site geven. User input wordt totaal niet gecontroleerd en wordt op alle kwetsbare manieren aan de mail funcite doorgegeven. In het kader van spam bestrijding zouden scripts als deze zonder pardon gewist mogen worden. :>

En het gebruik van een js alert() voor elke flapscheet is ook serieus not-done.

[ Voor 4% gewijzigd door Voutloos op 29-06-2008 11:20 ]

{signature}


  • Tweaker36
  • Registratie: Juni 2007
  • Laatst online: 18-09 08:25
Hmm, 'kleine' denkfout van mijn kant. Foute hersenkronkel.

Goed, redirecten lukt me nu wel, maar nu krijg ik geen boodschap meer of het al dan niet gelukt is...

De handler, zonder js alert-boxes en zonder redirect,is dan als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
if(isset($_POST['mail'])){
    $mail = $_POST['mail'];
    if(isset($_POST['aan']))$signup = true;
        else $signup = false;
    
    if(strpos($mail, "@") === FALSE){
    echo "<b>Gelieve uw email adress in te vullen !</b>";
    }else{
    
    $to      = 'annette@aromatheek.be';
    $subject = 'Nieuwsbrief site';
    $headers = 'From: '.$mail;
    if($signup) $message = "'$mail' wilt zich aanmelden voor de nieuwsbrief! :) \n";
        else $message = "'$mail' wilt zich afmelden van de nieuwsbrief... :( \n";
    $message .= "Datum : ".date(DATE_RFC822)."\n";
    $message .= "IP : ".$_SERVER['REMOTE_ADDR']."\n";
    
    $m_info = "SENT";
    $mail_ok = TRUE;
    
    if(!mail($to, $subject, $message, $headers)){
        $m_info = "NOT SENT!!";
        $mail_ok = FALSE;
    }
    $fp = @fopen("./archief_secret.txt","a");
    if($fp != FALSE){
        @fwrite($fp,$message."EMAIL : $m_info\n\n\n");
        fclose($fp);
    }else{print("ERROR writing\n<br />");}
    if($mail_ok){
    echo "<b>Bericht verzonden!</b>";
    }else{
    echo "<b>Fout tijdens verzenden van bericht, blabla!</b>";
    }
    }
}
?>


Met redirect maakt ik er het volgende van:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    (...)
    $fp = @fopen("./archief_secret.txt","a");
    if($fp != FALSE){
        @fwrite($fp,$message."EMAIL : $m_info\n\n\n");
        fclose($fp);
    }else{print("ERROR writing\n<br />");}
    if($mail_ok){
    echo "<b>Bericht verzonden!</b>";
    header('Location: http://www.aromatheek.be/reloaded/index.php');
    die; 
    }else{
    echo "<b>Fout tijdens verzenden van bericht, blabla!</b>";
    header('Location: http://www.aromatheek.be/reloaded/index.php');
    die;
    }
    }
}
?>

(ik test de code in een submap op mijn host, vandaar de /reloaded/ in de URL's)

Vrij logisch dat je geen berichtgeving krijgt, als je direct erna redirect, bedenk ik nu ( :+ ),
maar hoe moet het dan wel?

  • mithras
  • Registratie: Maart 2003
  • Niet online
Doorsturen naar de pagina waarin je de gebruiker bedankt ;)

  • Tweaker36
  • Registratie: Juni 2007
  • Laatst online: 18-09 08:25
mithras schreef op zondag 29 juni 2008 @ 11:38:
Doorsturen naar de pagina waarin je de gebruiker bedankt ;)
Daar zit iets in! 8)7
(maak ik straks even werk van!)
Zelfde voor als je geen email-adres ingeeft, dan mag ik ook naar een andere pagina redirecten.
Wellicht kan (verder gaan met) een PHP tutorial ook geen kwaad. Je hebt een paar gruwelijke security problemen, dus je kan maar beter niet een link naar deze site geven. User input wordt totaal niet gecontroleerd en wordt op alle kwetsbare manieren aan de mail funcite doorgegeven. In het kader van spam bestrijding zouden scripts als deze zonder pardon gewist mogen worden. :>
Er is idd bijzonder weinig controle. Mogelijke berichten met (schadelijke) scripts e.d. worden zonder meer doorgestuurd...

Is er een simpele en algemene methode om (een deel van) de schadelijk dingen tegen te gaan?

(ben een tijdje geleden gestart met een dik boek PHP en MySQL. Maar dat boek is nog lang niet doorgelezen. Moet ik eigenlijk doen... :+ )

  • Mad Marty
  • Registratie: Juni 2003
  • Laatst online: 13:15

Mad Marty

Je bent slimmer als je denkt!

Daar is hier meer dan genoeg over te vinden, bijvoorbeeld: [search=php veiligheid] e.d.

[ Voor 58% gewijzigd door Mad Marty op 29-06-2008 11:55 ]

Rail Away!


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Tweaker36 schreef op zondag 29 juni 2008 @ 11:49:
Is er een simpele en algemene methode om (een deel van) de schadelijk dingen tegen te gaan?
Snelste verbetering is om iig voorlopig je afzender constant te maken (en dus $headers veilig te houden) tot je weet wat je moet doen. ;)

[ Voor 3% gewijzigd door Voutloos op 29-06-2008 11:55 ]

{signature}


  • Tweaker36
  • Registratie: Juni 2007
  • Laatst online: 18-09 08:25
Voutloos schreef op zondag 29 juni 2008 @ 11:55:
[...]
Snelste verbetering is om iig voorlopig je afzender constant te maken (en dus $headers veilig te houden) tot je weet wat je moet doen. ;)
Idd. Dat is nu gedaan. ;)

Ben momenteel wat GoT-topics aan 't lezen...

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Waarom obfuscate je een e-mailadres in een plaatje :?

En een wat doelgerichtere zoek: mail header injection.

  • Tweaker36
  • Registratie: Juni 2007
  • Laatst online: 18-09 08:25
Blaise schreef op zondag 29 juni 2008 @ 12:50:
[...]
Waarom obfuscate je een e-mailadres in een plaatje :?
:+
Jep, I know. Wel, kijk, er zitten zo best 'veel' fouten in mijn site, ben ze er systematisch aan het uithalen...
De site krijgt een 'complete' make-over...
Pagina: 1