Shoutbox probleem
kijk dit is wat ik wil met sessies de shoutbox veilig maken tegen anti spam.
Dat is natuurlijk niet helemaal veilig maar ze moeten al hun geschiedenis enz wissen tot ze weer kunnen sturen. Maar ik wil dat er op die shoutbox een tijd komt zodat er ieder uur een berichtje kan geplaatst worden,
maar het moet met sessies blijven hoe doe ik dat?
dit heb ik:
Dat is natuurlijk niet helemaal veilig maar ze moeten al hun geschiedenis enz wissen tot ze weer kunnen sturen. Maar ik wil dat er op die shoutbox een tijd komt zodat er ieder uur een berichtje kan geplaatst worden,
maar het moet met sessies blijven hoe doe ik dat?
dit heb ik:
Quote:
<!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>Shoutbox - beta</title>
</head>
<body>
<form method="POST">
<table border="0">
<tr>
<td><strong>Naam:</strong></td>
<td><input type="text" name="Naam" maxlength="40" /></td>
</tr>
<tr>
<td><strong>Bericht:</strong></td>
<td><textarea name="Bericht" maxlength="125"></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="Toevoegen" value="Toevoegen!" /></td>
</tr>
</table>
</form>
</body>
</html>
Code (php)
<!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>Shoutbox - beta</title>
</head>
<body>
Code (php)
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
39
40
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
39
40
<?php
include("connect.php");
$Naam = mysql_real_escape_string(strip_tags($_POST['Naam']));
$Bericht = mysql_real_escape_string(strip_tags($_POST['Bericht']));
$IP = $_SERVER['REMOTE_ADDR'];
if(isset($_POST['Toevoegen'])) {
if(empty($Naam)) {
echo "Geen naam ingevuld!<br />";
}
elseif(empty($Bericht)) {
echo "Geen bericht ingevuld!<br />";
}
elseif(strlen($Naam) > 40) {
echo "Naam us te lang!<br />";
}
elseif(strlen($Bericht) > 125) {
echo "Bericht is te lang!<br />";
}
else {
$insert = "INSERT INTO `shoutbox` (IP, Naam, Bericht) VALUES ('$IP', '$Naam', '$Bericht')";
mysql_query($insert) or die(mysql_error());
echo "Je bericht werd succesvol toegevoegd!<br />";
$_SESSION['gepost'] = 1;
}
}
}
$query = "SELECT * FROM shoutbox ORDER BY id DESC LIMIT 4";
$shout = mysql_query($query);
while($r = mysql_fetch_array($shout)) {
echo " ".$r['Naam'].": ".$r['Bericht']."<br /> ";
}
?>
include("connect.php");
$Naam = mysql_real_escape_string(strip_tags($_POST['Naam']));
$Bericht = mysql_real_escape_string(strip_tags($_POST['Bericht']));
$IP = $_SERVER['REMOTE_ADDR'];
if(isset($_POST['Toevoegen'])) {
if(empty($Naam)) {
echo "Geen naam ingevuld!<br />";
}
elseif(empty($Bericht)) {
echo "Geen bericht ingevuld!<br />";
}
elseif(strlen($Naam) > 40) {
echo "Naam us te lang!<br />";
}
elseif(strlen($Bericht) > 125) {
echo "Bericht is te lang!<br />";
}
else {
$insert = "INSERT INTO `shoutbox` (IP, Naam, Bericht) VALUES ('$IP', '$Naam', '$Bericht')";
mysql_query($insert) or die(mysql_error());
echo "Je bericht werd succesvol toegevoegd!<br />";
$_SESSION['gepost'] = 1;
}
}
}
$query = "SELECT * FROM shoutbox ORDER BY id DESC LIMIT 4";
$shout = mysql_query($query);
while($r = mysql_fetch_array($shout)) {
echo " ".$r['Naam'].": ".$r['Bericht']."<br /> ";
}
?>
<form method="POST">
<table border="0">
<tr>
<td><strong>Naam:</strong></td>
<td><input type="text" name="Naam" maxlength="40" /></td>
</tr>
<tr>
<td><strong>Bericht:</strong></td>
<td><textarea name="Bericht" maxlength="125"></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="Toevoegen" value="Toevoegen!" /></td>
</tr>
</table>
</form>
</body>
</html>
Waarom zou je dit met sessies willen doen? Ook dat is niet waterdicht.
Sla in de database bij elk bericht ook een datumtijd stempel op en controleer voordat iemand een bericht plaatst of er niet al een bericht bestaat met dat ip adres binnen een bepaald tijdsbestek.
Sla in de database bij elk bericht ook een datumtijd stempel op en controleer voordat iemand een bericht plaatst of er niet al een bericht bestaat met dat ip adres binnen een bepaald tijdsbestek.
En hoe doe je dat? :s
Blanche:
Sla in de database bij elk bericht ook een datumtijd stempel op en controleer voordat iemand een bericht plaatst of er niet al een bericht bestaat met dat ip adres binnen een bepaald tijdsbestek.
Let wel op dat als je site veel bezocht wordt door scholieren, of mensen van een bedrijf, dat er dan vaak maar 1 iemand een bericht kan plaatsen.
Meestal gebruiken scholen en bedrijven maar een paar ip adressen, dus er zitten veel meer mensen achter 1 ip adres.
Dat is niet echt een antwoord op m'n vraag :s
Als je anti-spam wil hebben, kun je ook gewoon per minuut of per 5 minuten 1 bericht. Dan zal het niet zo een groot probleem zijn als je het per IP doet.
Aaargh, heeft hier niemand een voorbeeld hoe ik het ga scripten fz?
hehe
Misschien dit iets?
Niet getest, maar zou een opzet kunnen zijn. (hoewel wel omslachtig, zou ook korter kunnen denk ik)
Niet getest, maar zou een opzet kunnen zijn. (hoewel wel omslachtig, zou ook korter kunnen denk ik)
Code (php)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
include("connect.php");
$Naam = mysql_real_escape_string(strip_tags($_POST['Naam']));
$Bericht = mysql_real_escape_string(strip_tags($_POST['Bericht']));
$IP = $_SERVER['REMOTE_ADDR'];
if(isset($_POST['Toevoegen'])) {
if(empty($Naam)) {
echo "Geen naam ingevuld!<br />";
}
elseif(empty($Bericht)) {
echo "Geen bericht ingevuld!<br />";
}
elseif(strlen($Naam) > 40) {
echo "Naam us te lang!<br />";
}
elseif(strlen($Bericht) > 125) {
echo "Bericht is te lang!<br />";
}
else {
$date=date('d-m-Y-H-i-s');
$sql1 = "SELECT * FROM shoutbox WHERE IP = '$IP'";
$res1 = mysql_query($sql1) or die(mysql_error());
while(mysql_fetch_array($res1)){
$ip=$res1['IP'];
$datumtijd=$res1['datumtijd'];
}
//arrays met daarin alle tijdsgegevens
$a1=exlode("-", $datumtijd);
$a2=exlode("-", $date);
//hier kun je tijdsbestek uitkiezen, nu is hij om het uur ingesteld
if(($a1[0]==$a2[0])&&($a1[1]==$a2[1])&&($a1[2]==$a2[2])&&($a1[3]==$a2[3])&&($a1[4]!==$a2[4])&&($a1[4]!==$a2[4])){
$date=date('d-m-Y-H-i-s');
$insert = "INSERT INTO `shoutbox` (IP, Naam, Bericht, datumtij) VALUES ('$IP', '$Naam', '$Bericht', '$date')";
mysql_query($insert) or die(mysql_error());
echo "Je bericht werd succesvol toegevoegd!<br />";
}
}
}
}
$query = "SELECT * FROM shoutbox ORDER BY id DESC LIMIT 4";
$shout = mysql_query($query);
while($r = mysql_fetch_array($shout)) {
echo " ".$r['Naam'].": ".$r['Bericht']."<br /> ";
}
?>
include("connect.php");
$Naam = mysql_real_escape_string(strip_tags($_POST['Naam']));
$Bericht = mysql_real_escape_string(strip_tags($_POST['Bericht']));
$IP = $_SERVER['REMOTE_ADDR'];
if(isset($_POST['Toevoegen'])) {
if(empty($Naam)) {
echo "Geen naam ingevuld!<br />";
}
elseif(empty($Bericht)) {
echo "Geen bericht ingevuld!<br />";
}
elseif(strlen($Naam) > 40) {
echo "Naam us te lang!<br />";
}
elseif(strlen($Bericht) > 125) {
echo "Bericht is te lang!<br />";
}
else {
$date=date('d-m-Y-H-i-s');
$sql1 = "SELECT * FROM shoutbox WHERE IP = '$IP'";
$res1 = mysql_query($sql1) or die(mysql_error());
while(mysql_fetch_array($res1)){
$ip=$res1['IP'];
$datumtijd=$res1['datumtijd'];
}
//arrays met daarin alle tijdsgegevens
$a1=exlode("-", $datumtijd);
$a2=exlode("-", $date);
//hier kun je tijdsbestek uitkiezen, nu is hij om het uur ingesteld
if(($a1[0]==$a2[0])&&($a1[1]==$a2[1])&&($a1[2]==$a2[2])&&($a1[3]==$a2[3])&&($a1[4]!==$a2[4])&&($a1[4]!==$a2[4])){
$date=date('d-m-Y-H-i-s');
$insert = "INSERT INTO `shoutbox` (IP, Naam, Bericht, datumtij) VALUES ('$IP', '$Naam', '$Bericht', '$date')";
mysql_query($insert) or die(mysql_error());
echo "Je bericht werd succesvol toegevoegd!<br />";
}
}
}
}
$query = "SELECT * FROM shoutbox ORDER BY id DESC LIMIT 4";
$shout = mysql_query($query);
while($r = mysql_fetch_array($shout)) {
echo " ".$r['Naam'].": ".$r['Bericht']."<br /> ";
}
?>
gebruik gewoon captcha? en daarbij, een publieke volledig spam vrije shoutbox maken lukt je niet. Ik zou een vingerafdruk gebruiken. je neemt de gebruiker zijn ip address, browser, en isp *al is dat overdreven met ip er al bij* in een md5 hash. vergelijk die met een post, en wis 5 minuten na post de vingerafdruk... een beetje omslachtig. Maar een uitgebreide vingerafdruk werkt meestal wel. tenzij je inderdaad met ene bedrijf/school te maken hebt. die hebben namelijk meestal de zelfde browser.
Gewijzigd op 21/05/2010 20:10:54 door wesley Overdijk
captcha past niet in m'n lay-out dus daarom gebruik ik dat niet ;)
Siebe:
captcha past niet in m'n lay-out dus daarom gebruik ik dat niet ;)
??




