Hallo allemaal. Ik ben voor het eerst begonnen met PHP en MySQL (zoals tachtigduizend anderen) en ik wilde graag weten of ik een beetje goed bezig ben.

Ik heb een gastenboek en wil dus een paar dingen voorkomen:

- SQL injecties
- HTML abuse
- Lege berichten (of juist te grote)

Nu heb ik zo hier er daar het internet afgesprokkeld en heb ik zo een scriptje op kunnen stellen die dit (naar mijn idee dus) goed doet. Dit is het deel van mijn script:


        // controleren of naam en bericht niet leeg zijn

	if ($name == "" or $message == "")

		{
		echo "One or more required fields were found blank. Please go back and try again.";
		$_SESSION['randomnr2'] = "cleaned";
		exit;
		}

	// grootte van bericht controleren

	$charlimit = 500;

	if (strlen($_POST['message']) >= $charlimit)

		{

		echo "We're sorry, but the maximum number of characters allowed is 500. Please shorten your message and try again. Thank you";
		$_SESSION['randomnr2'] = "cleaned";
		exit;
		}

	// html tags verwijderen

	$name = strip_tags($name);
	$message = strip_tags($message);

	// sql injection voorkomen

	$name = mysql_real_escape_string($name);
	$message = mysql_real_escape_string($message);


Is dit goed? Is dit veilig? Ik hoop dat er iemand is die mij kan helpen.

Dankjewel.
Dit:

$_SESSION['randomnr2'] = "cleaned";

gaat over een captcha script wat ik gebruik (voor het geval je je dus afvraagt wat het in godsnaam betekend :P ). Het zorgt ervoor dat gebruikers altijd opnieuw een nieuwe code moeten invoeren in het geval dat ze dus een error krijgen en terug gaan om het opnieuw te proberen..
Hallo Rowan,
Zet je script even tussen [ignore]
[/ignore] tags.
Met de functie [php]empty[/php] kan je kijken of iets leeg is of niet.
Voor de rest heb ik geen aanmerkingen op je code die je gebruikt
$name == "" or $message == ""

Kijk even naar de functie [php]empty()[/php]

Verder is de methode wel goed. Misschien moet je even de functie [php]trim()[/php] bekijken, zodat iemand ook geen spatie kan posten.



Gebruik volgende keer even je edit knopje, dan hoef je niet nog een post aan te maken
Wow bedankt voor de snelle reacties! Ik zou dus de empty functie hiervoor goed kunnen gebruiken? In de zin van:


if (empty($message)) {
    echo "You haven't posted a message. Please try again.";
    exit;
}
beter nog:

if(empty($_POST['message']))
Rowan schreef op 19.12.2007 17:28
Wow bedankt voor de snelle reacties! Ik zou dus de empty functie hiervoor goed kunnen gebruiken? In de zin van:


if (empty($message)) {
    echo "You haven't posted a message. Please try again.";
    exit;
}


Dat klopt inderdaad en om te voorkomen dat iemand alleen een spatie invuld kan je [php]trim[/php] gebruiken.

<?php
$message = trim($_POST['message']);

if (empty($message)) {
echo "You haven't posted a message. Please try again.";
exit;
}
?>
@Thijs,

Dat gaat je gegarandeerd een notice opleveren wanneer er geen bericht verzonden is...

Een ogenblikje

[edit]
Zie de code hieronder. Niet getest, maar lijkt me te werken:
[/edit]


<?php
$charlimit 		= 500;
$charminimum 	= 5;

if(empty($_POST['name']))		{ $melding['naam'] 		= 'No name given'; }
	elseif(strlen(trim($_POST['message'])) >= $charlimit)	{ $melding['message'] 	= 'We\'re sorry, but the maximum number of characters allowed is 500. Please shorten your message and try again. Thank you'; }

if(empty($_POST['message']))	{ $melding['message']	= 'No message given'; }
	elseif(strlen(trim($_POST['message'])) <= $charminimum) { $melding['message']	= 'Message to short'; }

if(isset($melding))
{
	//return het formulier met de meldingen
	$_SESSION['randomnr2'] = "cleaned";
}
else
{
	$sql = "INSERT INTO
				gastenboek
				(
					name,
					message,
					time
				)
			VALUES
			(
				'".mysql_real_escape_string(strip_tags(trim($_POST['name'])))."',
				'".mysql_real_escape_string(strip_tags(trim($_POST['message'])))."',
				NOW()
			)";
}
?>
WOW. Ok ik moet nu weg, maar ik ga het vanavond uitproberen. In ieder geval hartstikke bedankt!!
PHP Newbie schreef op 19.12.2007 17:31
@Thijs,

Dat gaat je gegarandeerd een notice opleveren wanneer er geen bericht verzonden is...


@PHP Newbie,

Niet als er een veld bestaat die message heet, dan is $_POST['message'] gewoon leeg maar hij bestaat wel degelijk en kan de functie trim gewoon zijn werk doen ( ookal doet hij niks bij een lege string ), en leverd het geen notice op.

Reageren