hulp bij beveiliging
Bestaat er een oplossing vor mijn spam etc. probleem?
Ik heb een paar websites waar men tegen betaling via mollie een reclame boodschap met link kan plaatsen die dan zichtbaar word in een lichtkrant op een aantal sites. En dit scriptje word op de server overmatig bezocht door spam etc verspreiders die daar hun teksten en links (viagra etc) plaatsen.
Eerst dacht ik het php scriptje niet in de root op de server te plaatsen maar in een extra directory, maar ik weet niet of dat zinvol is want daar zal door spammers ook wel gezocht worden.
Even in het kort de huidige werking:
Op de website word geklikt op "reclame plaatsen" ... er word dan naar Mollie gelinkt die de betaling regelt die daarna het php scriptje aanroep die een invulform op het scherm zet, na een submit word de geplaatste tekst in een .txt bestandje gezet op de server van waaruit het lichtkrant scriptje op de diverse sites dit .txt bestandje uitleest en in de lichtkrant plaatst.
het probleem is dus dat er driftig gespamd word.
Voor of na het gebruik van het phpscriptje beveiliging aanbrengen heeft geen zin omdat die weg niet gevolgd word.De spammer zoekt op de server na een scriptje wat hij kan invullen. Dus de beveiliging zal dus in het php scriptje moeten zitten.
Ik denk bijvoorbeeld aan schecken op niet meer dan 1 link... of van waaruit is het scriptje aangeroepen....
Wie zet mij op het juiste spoor mijn php kennis is beperkt.
gr jan
Mollie heeft uitstekende documentatie, kijk daarin. Daar zal vast wel wat in staan om te controleren of er betaald is. Dat moet je in het php script implanteren die de tekst toevoegd.
Misschien begrijp ik trouwens niet helemaal wat je bedoelt, je wilt voorkomen dat een form gespamd wordt? of?
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
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
<?php
session_start();
// generate 5 digit random number
$rand = rand(10000, 99999);
// create the hash for the random number and put it in the session
$_SESSION['image_random_value'] = md5($rand);
// create the image
$image = imagecreate(60, 30);
// use white as the background image
$bgColor = imagecolorallocate ($image, 255, 255, 255);
// the text color is black
$textColor = imagecolorallocate ($image, 0, 0, 0);
// write the random number
imagestring ($image, 5, 5, 8, $rand, $textColor);
// send several headers to make sure the image is not cached
// taken directly from the PHP Manual
// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// always modified
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
// HTTP/1.0
header("Pragma: no-cache");
// send the content type header so the image is displayed properly
header('Content-type: image/jpeg');
// send the image to the browser
imagejpeg($image);
// destroy the image to free up the memory
imagedestroy($image);
?>
session_start();
// generate 5 digit random number
$rand = rand(10000, 99999);
// create the hash for the random number and put it in the session
$_SESSION['image_random_value'] = md5($rand);
// create the image
$image = imagecreate(60, 30);
// use white as the background image
$bgColor = imagecolorallocate ($image, 255, 255, 255);
// the text color is black
$textColor = imagecolorallocate ($image, 0, 0, 0);
// write the random number
imagestring ($image, 5, 5, 8, $rand, $textColor);
// send several headers to make sure the image is not cached
// taken directly from the PHP Manual
// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// always modified
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
// HTTP/1.0
header("Pragma: no-cache");
// send the content type header so the image is displayed properly
header('Content-type: image/jpeg');
// send the image to the browser
imagejpeg($image);
// destroy the image to free up the memory
imagedestroy($image);
?>
Gewijzigd op 01/01/1970 01:00:00 door Jasper Sni
ik had bij mollie ook al gekeken
gr jan
Mijn gedacht is ergens in dit scriptje gezet moet worden dat automatisch spammen onmogelijk maakt maar de gebruiksvriendelijkheid niet aantast.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
require("config.inc.php");
if($_REQUEST['Send'])
{
if(!empty($_REQUEST['Name']) && !empty($_REQUEST['Nachricht']) && strlen($_REQUEST['Name'])<=20 && strlen($_REQUEST['Email'])<=100 && strlen($_REQUEST['Nachricht'])<=80 && strlen($_REQUEST['Link'])<=200)
{
$Name = strip_tags(str_replace("|", "", $_REQUEST['Name']));
$Email = strip_tags(str_replace("|", "", $_REQUEST['Email']));
$Nachricht = strip_tags(str_replace("|", "", $_REQUEST['Nachricht']));
$Link = strip_tags(str_replace("|", "", $_REQUEST['Link']));
if(strlen($Link)<=7)
{
$Link="";
}
$Zeile = $Name . "|" . $Email . "|" . $Nachricht . "|" . $Link . "|" . date("Y-m-d H:i:s") . "|" . $_SERVER['REMOTE_ADDR'] . "\n";
$FilePointer = fopen($DateinameNachrichten, "a");
fwrite($FilePointer, $Zeile);
fclose($FilePointer);
}
header("LOCATION: box.php");
}
else
{
?>
require("config.inc.php");
if($_REQUEST['Send'])
{
if(!empty($_REQUEST['Name']) && !empty($_REQUEST['Nachricht']) && strlen($_REQUEST['Name'])<=20 && strlen($_REQUEST['Email'])<=100 && strlen($_REQUEST['Nachricht'])<=80 && strlen($_REQUEST['Link'])<=200)
{
$Name = strip_tags(str_replace("|", "", $_REQUEST['Name']));
$Email = strip_tags(str_replace("|", "", $_REQUEST['Email']));
$Nachricht = strip_tags(str_replace("|", "", $_REQUEST['Nachricht']));
$Link = strip_tags(str_replace("|", "", $_REQUEST['Link']));
if(strlen($Link)<=7)
{
$Link="";
}
$Zeile = $Name . "|" . $Email . "|" . $Nachricht . "|" . $Link . "|" . date("Y-m-d H:i:s") . "|" . $_SERVER['REMOTE_ADDR'] . "\n";
$FilePointer = fopen($DateinameNachrichten, "a");
fwrite($FilePointer, $Zeile);
fclose($FilePointer);
}
header("LOCATION: box.php");
}
else
{
?>
<html>
<head>
<style type="text/css">
<!--
BODY,TD {
font-family: verdana, sans-serif;
font-size: 10pt;
}
-->
</style>
<title>Adult reclame voor Euro 1,30</title>
</head>
<body>
<b>Vul het formulier in om u tekst of advertentie te plaatsen:</b><br>
<font color="#FF0000"><b>
<small>* verplichte velden</small></b></font><br>
<table border="0" cellpadding="1" cellspacing="2" width="452" height="152">
<form action="" method="post" onSubmit="javascript:window.close();" target="">
<tr>
<td>Naam of onderwerp (20 tekens) <b><font color="#FF0000">*</font></b></td>
<td height="24"><input maxlength="20" name="Name" size="20" type="text"></td>
</tr>
<tr>
<td>eMail</td>
<td height="24"><input maxlength="100" name="Email" size="20" type="text"></td>
</tr>
<tr>
<td>Uw tekst of reclame (30 tekens)<b><font color="#FF0000">*</font></b></td>
<td height="24"><input maxlength="80" name="Nachricht" size="30" type="text"></td>
</tr>
<tr>
<td width="224">Link naar website of verwijzing</td>
<td height="24" width="218"><input maxlength="200" name="Link" size="20" type="text" value="http://"></td>
</tr>
<tr>
<td align="center" colspan="2" height="28"><input name="Send" type="submit" value="verstuur"></td>
</tr>
<tr>
<td align="right" colspan="2" height="14"><small><a href="javascript:window.close();">Venster sluiten</a></small></td>
</tr>
</form>
</table>
</body>
</html>
Jan schreef op 13.10.2008 16:34:
Dat klop wat je zegt maar de spam bot komt helemaal niet bij mollie en heeft mollie niet nodig om het php scriptje te vinden op de server en te bekladden.
ik had bij mollie ook al gekeken
gr jan
ik had bij mollie ook al gekeken
gr jan
Oke, effe alles op een rijtje zetten:
Bestand1.php daarin wordt een linkie naar mollie gemaakt. Bij mollie betaal je. Mollie stuurt je door naar Bestand2.php Bestand2.php past het tekst bestand aan.
Dan moet je gewoon:
Karl schreef op 13.10.2008 16:30:
Mollie heeft uitstekende documentatie, kijk daarin. Daar zal vast wel wat in staan om te controleren of er betaald is. Dat moet je in het php script implanteren die de tekst toevoegd.
toepassen op bestand2.php.
Ook is er dacht ik hier op phphulp.nl een script geweest:
site:phphulp.nl mollie
site:phphulp.nl Arjan Kapteijn mollie
Edit:
Niet bumpen.
Gebruik en tags.
Edit2:
Jan schreef op 13.10.2008 16:43:
Mijn gedacht is ergens in dit scriptje gezet moet worden dat automatisch spammen onmogelijk maakt maar de gebruiksvriendelijkheid niet aantast.
Lees mijn post nouw eens.
Viagra lijkt me niet zo'n probleem hehe....
klopt helemaal de aanpassing moet in bestand2.php
Jan schreef op 13.10.2008 16:46:
klopt helemaal de aanpassing moet in bestand2.php
Dus wat is je probleem?
Hoe voorkom ik dat dit scriptje beklad word.
Jan schreef op 13.10.2008 16:56:
Hoe voorkom ik dat dit scriptje beklad word.
Eigenlijk is dit gewoon een aanvraag of vacature?
wat ik met deze vraag moet is mij onduidelijk
Ik neem aan dat mollie je alleen doorstuurt als je betaald hebt. Dat betekend dat bots op de gok je verwerkingsscript gevonden heeft? Of link je per ongeluk naar je verwerkingsscript in de href ofzo?
In het verleden gebeurde dat af en toe en kon ik met de afgevangen ip adressen ip de server een ip deny zetten en dan ging het wel weer even goed maar de laatste dagen een vloedgolf van spam china.
ik ben al wel een poosje aan het stoeien door captcha in de invul form te zetten maar dat gaat niet lekker.
De bedoeling is eigelijk dat bovenaan de invulpagina een (bijvoorbeeld) eenvoudig rekensommetje of vraag staat en daaronder de rest van het formulier waar onderaan submit staat.
Het formulier moet dus met 1 submit alles afhandelen en al na gelang de juistheid van het rekensommetje of vraag bij ok pas de resterende afhandeling verrichten.
moeilijk verhaal maar hopelijk te begrijpen
gr jan
In de $_SERVER['HTTP_REFERER'] variabele kun je zien waar de gebruiker vandaan kwam... Als ze van Mollie af kwamen dan moet dat in deze variabele komen te staan.
Daarnaast stuurt een Normale Browser bepaalde Request Headers naar je Server, probeer de functie getallheaders (of apache_request_headers) om te kijken hoe dit er normaliter uitziet.. Bots hebben in veel gevallen niet al deze headers.. (tenzij ze gebouwd zijn door slimme mensen).
Nog iets wat de meeste bots niet kunnen is javascript uitvoeren. Je kunt een javascript mechanisme uitvoeren, bijvoorbeeld: Je laat door middel van Javascript een dynamische waarde naar een invoer-veld schrijven, zodra het formulier gesubmit wordt, dan krijg je ook die dynamische waarde meegestuurd. Als de client niet in staat is javascript uit te voeren dan gebeurt dit niet! (tenzij de bot gebouwd is door slimme mensen).
De Captcha is vrij simpel uit te voeren: je neemt twee willekeurige waardes, het liefste allemaal met woorden (four plus two is ? [[ vul 6 in ]]), in de $_SESSION zet je de verwachte waarde.. zorg wel dat je Sessies gebruikt en niet Cookies.
Check de documentatie van mollie, of pak anders een ander systeem.. Ga een unieke code meegeven en zorg ervoor dat mollie tegen jouw server gaat zeggen welke codes hebben betaald.