Error: Invalid Referer

Status
Niet open voor verdere reacties.

headout

Terugkerende gebruiker
Lid geworden
30 okt 2000
Berichten
2.939
Ik gebruik een php scriptje om een formuliertje makkelijk uit te lezen. Het formuliertje werkt goed, net als het script, aangezien al een stuk of 25 mensen daadwerkelijk gebruik gemaakt hebben van het formuliertje. Bij 3 mensen wordt er een foutmelding vertoond: Error: Invalid Referer

PHP:
<?
// Recipient of message (This can be changed via the form itself)
$recipient = 'ron@heupdysplasie.nl';

// Subject of message (This can be changed via the form itself)
$subject = 'Aanmelden donateur';

// This is a list of domains that can run EZ FormMail. Do not include
// www, just the actual domain/ip address!
$referers = array('heupdysplasie.nl', 'stichtingheupdysplasie.nl');

// This is the page that users will be redirected to after the form is
// processed successfully.
$success_url = 'index.php?id=bedankt';

// Your site URL
$siteurl = 'http://www.heupdysplasie.nl';

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

function Print_Footer() {
	echo '<p><center>Powered by EZ FormMail. Get it <b>free</b> from <a href="http://www.sensationdesigns.com">[url]http://www.sensationdesigns.com[/url]</a>!</center>';
}

function Check_Referer() {
	global $referers;
	$temp = explode('/', $_SERVER['HTTP_REFERER']);
	$referer = $temp[2];
	$found = false;
	foreach ($referers as $domain) {
		if (stristr($referer, $domain)) { $found = true; }
	}
	return $found;
}

if ($_POST) {
	if (Check_Referer() == false) {
		echo '<font size="+1" color="#FF0000">Error: Invalid Referer</font><BR>';
		echo 'You are accessing this script from an unauthorized domain!';
		Print_Footer();
		die();
	}
	$ctr = 0;
	
	$isrealname = 0;
	$isemail = 0;
	
	foreach ($_POST as $key => $val) {
		if ($key == 'realname') { $isrealname = 1; }
		if ($key == 'email') { $isemail = 1; }
		if (substr($key, 0, 4) == 'req_' || $key == 'realname' || $key == 'email') {
			if ($val == '') {
				if ($ctr == 0) {
					echo '<font size="+1" color="#FF0000">Er gaat iets mis: je hebt een (aantal) veld(en) niet ingevuld.</font><BR>';
					echo 'De volgende <i>verplichte</i> veld(en) is/zijn niet ingevuld:<BR>';
				}
				echo '<BR>- <b>'.substr($key, 4).'</b>';
				$ctr++;
			}
		}
	}
	if ($ctr > 0) {
		echo '<p>Klik <a href="javascript:history.go(-1)">hier</a> om terug te gaan';
		Print_Footer();
		die();
	}
	else {
		if ($isrealname == 0) {
			echo '<font size="+1" color="#FF0000">Error: Missing Field</font><BR>';
			echo 'No "realname" field found.<p><a href="'.$siteurl.'">here</a> to return to the home page.';
			Print_Footer();
			die();
		}
		elseif ($isemail == 0) {
			echo '<font size="+1" color="#FF0000">Error: Missing Field</font><BR>';
			echo 'No "email" field found.<p><a href="'.$siteurl.'">here</a> to return to the home page.';
			Print_Footer();
			die();
		}
	}
	
	if (!(preg_match("/^.{2,}?@.{2,}\./", $_POST['email']))) {
			echo '<font size="+1" color="#FF0000">Error: Invalid E-mail</font><BR>';
			echo 'The e-mail address you entered (<i>'.$_POST['email'].'</i>) is invalid.';
			Print_Footer();
			die();
	}
	
	$body = "Below is the result of your feedback form. It was submitted on:\n".date('l, F jS, Y').' at '.date('g:ia').".\n";
	
	foreach ($_POST as $key => $val) {
		if ($key == 'recipient') { $recipient = $val; }
		elseif ($key == 'subject') { $subject = $val; }
		else {
			if ($key != 'realname' && $key != 'email') {
				$body .= "\n".str_replace('req_', '', $key).": $val";
			}
		}
	}
	$body .= "\n\n-------- Submission Details --------\n";
	$body .= "Remote Address: ".getenv('REMOTE_ADDR')."\n";
	$body .= "HTTP User Agent: ".getenv('HTTP_USER_AGENT')."\n\n";
	$body .= "--------------------------------------------------\n";
	$body .= "Powered by EZ FormMail. Available at [url]http://www.sensationdesigns.com[/url]!";
	
	$mailheaders = "From: ".$_POST['realname']." <".$_POST['email'].">\n";
	$mailheaders .= "Reply-To: ".$_POST['email'];
	
	mail($recipient, $subject, $body, $mailheaders);
	header("Location: $success_url");
}
else {
	echo '<center>You have access this page from an invalid location. Please click <a href="'.$siteurl.'">here</a> to go to '.$siteurl.'.</center>';
}

Print_Footer();
?>

Het formulier staat hier:
http://www.heupdysplasie.nl/index.php?id=donateurs
(voor een ieder die even gaat testen: zet bij opmerkingen even test/helpmij oid)

Heeft iemand enig idee hoe ik dit kan oplossen?
 
ik zal even niet op de parse errors afgaan, maar gewoon op de echte scriptfouten...
vervang
PHP:
function Check_Referer() {
    global $referers;
    $temp = explode('/', $_SERVER['HTTP_REFERER']);
    $referer = $temp[2];
    $found = false;
    foreach ($referers as $domain) {
        if (stristr($referer, $domain)) { $found = true; }
    }
    return $found;
}
eens door
PHP:
function Check_Referer() {
    global $referers;
    $temp = explode('/', $_SERVER['HTTP_REFERER']);
    $referer = $temp[2];
    $found = false;
    foreach ($referers AS $key => $domain) {
        if (stristr($referer, $domain)) { $found = true; }
    }
    return $found;
}
 
Geplaatst door JPeetje
ik zal even niet op de parse errors afgaan, maar gewoon op de echte scriptfouten...
Parse errors? Ik heb geen parse errors? :8-0:

Je oplossing lijkt niet te werken.

Wat inmiddels wel duidelijk is, is dat mensen met NIS/symantec firewall deze melding krijgen. Zetten ze deze uit, dan gaat het wel goed, dwz. men krijgt een bedabkt pagina te zien. Weird! :8-0:
 
Geplaatst door headout
Parse errors? Ik heb geen parse errors? :8-0:
als ik dit zinnetje
PHP:
    $body .= "Powered by EZ FormMail. Available at <a href="http://www.sensationdesigns.com" target="_blank">[url]http://www.sensationdesigns.com[/url]</a>!";
lees, dan veroorzaakt dat zeker wel een error :)
maar dat komt waarschijnlijk doordat de regular expressions op helpmij dit omzetten...anders klopt 't namelijk wel.

maar als dit probleem aan nav/nis ligt, dan zul je een andere beveiliging moeten coderen...
kweet niet hoeveel php kennis je hebt, maar zo'n geweldige php beveiliging is dit ook weer niet ;)
je kan beter controleren voor elk invoerveld of die ook daadwerkelijk in een formulier zijn meeverzonden...tenslotte kan iedereen op zijn eigen pc een formuliertje maken met
Code:
<form action="http://www.heupdysplasie.nl/formulierverwerking.php" method="post">
waardoor hij wel verwerkt wordt op jouw server
PHP:
<?
$alle_namen_van_de_invoervelden = array("naam","woonplaats","adres","etc, etc");
  foreach($alle_namen_van_de_invoervelden AS $key => $value)
  {
    if(!isset($_POST[$value]))
    {
    die("Houdt je aan het formulier");
    }
  }
$naam = htmlspecialchars($_POST["naam"]);
$woonplaats = .......enz enz

?>
stukken betere beveiliging in mijn mening :)
succes :thumb:
 
Geplaatst door JPeetje

kweet niet hoeveel php kennis je hebt, maar zo'n geweldige php beveiliging is dit ook weer niet ;)
Mijn kennis is natuurlijk echt heel geweldig op het gebied van php (niet dus). Ik was al blij dat ik dit script werkend kreeg. :D

Ik ga eens nadenken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan