ik heb een code geschreven maar nu vraag ik me af is dit veilig genoeg.
met dit script kunnen leden privé-berichten naar elkaar schrijven.


Hier mee word het bericht ontvangen.
<?php
$select = mysqli_query($dbcreat,"SELECT * FROM `berichten` WHERE `aan`='".mysqli_real_escape_string($dbcreat,$data->login)."' AND `id`='".mysqli_real_escape_string($dbcreat,$_GET['id'])."'");
$bericht = mysqli_fetch_object($select);
mysqli_query($dbcreat,"UPDATE `berichten` SET `nieuw`='0' WHERE `id`='".mysqli_real_escape_string($dbcreat,$_GET['id'])."' AND `aan`='".mysqli_real_escape_string($dbcreat,$data->login)."'");
$bericht->bericht = htmlspecialchars($bericht->bericht);
$bericht->bericht= preg_replace('/\n/',"<br>\n",$bericht->bericht);
$bericht->bericht= preg_replace("/\[b\]/", "<b>", $bericht->bericht);
$bericht->bericht= preg_replace("/\[\/b\]/", "</b>", $bericht->bericht);
$bericht->bericht= preg_replace("/\[u\]/", "<u>", $bericht->bericht);
$bericht->bericht= preg_replace("/\[\/u\]/", "</u>", $bericht->bericht);
$bericht->bericht= preg_replace("/\[i\]/", "<i>", $bericht->bericht);
$bericht->bericht= preg_replace("/\[\/i\]/", "</i>", $bericht->bericht);
$bericht->bericht= preg_replace("/\[s\]/", "<s>", $bericht->bericht);
$bericht->bericht= preg_replace("/\[\/s\]/", "</s>", $bericht->bericht);
$bericht->bericht = preg_replace("#\[img\](.*?)\[\/img\]#si","<br>*Images zijn niet toegestaan!*<br>", $bericht->bericht);
$bericht->bericht = preg_replace("/(http:\/\/\S+)/",<br>"***Website links zijn niet toegestaan***<br>",$bericht->bericht);
$bericht->bericht = preg_replace("/\n/","<br>\n",$bericht->bericht);
?>

en hier mee word een bericht verzonden.

<?php

mysqli_query($dbcreat,
"INSERT INTO `berichten`
(
onderwerp,
bericht,
datum,
aan,
van,
nieuw,
inbox,
outbox,
algemeenbericht)
values(
'".mysqli_real_escape_string($dbcreat,$_POST['onderwerp'])."',
'".mysqli_real_escape_string($dbcreat,$_POST['bericht'])."',
'".mysqli_real_escape_string($dbcreat,$datum)."',
'".mysqli_real_escape_string($dbcreat,$_POST['aan'])."',
'".mysqli_real_escape_string($dbcreat,$data->login)."',
'1',
'1',
'0',
'0'
)");
$stats = "Uw bericht is verzonden.";

?>
Ik zie weinig schokkends.....
Je zou de reguliere expressies aan kunnen passen zodat je in een enkele expressie op beide tags scant. Zo voorkom je foute mark-up als iemand een tag vergeet af te sluiten.

Verder zou ik niet per veld een folder voor een bericht in de database plaatsen, maar de folders hardcoded of in de database opslaan.
Ik neem aan dat je overal dezelfde character encoding gebruikt? Anders werken je escape-functies (htmlspecialchars, _real_escape_string) mogelijk niet goed.

Ik zou je character encoding ook altijd expliciet instellen:
- bij het maken van een verbinding met je database middels een _set_charset() functie
- bij het escapen van HTML via htmlspecialchars($text, <quote stijl>, <character encoding>)
- bij het afdrukken van je document middels een PHP Content-Type header of meta-tag

Verder hoop ik dat al die $bericht->bericht operaties worden uitgevoerd voor als je een bericht afdrukt? Ik zou het originele bericht onbewerkt opslaaan.

Het loont ook de moeite deze "UBB-code" te vangen in een functie zodat je deze op meer plaatsen kunt gebruiken. Dan ben je er ook van verzekerd dat dat altijd op dezelfde manier gebeurt.

Reageren