1

mandag, 23. april 2007, 16:49


Hej.

Jeg er ved at udvikle en blog, og til den blog skal jeg så lave et simpelt spam protektion system.

Jeg har lavet en variable med navnet $spam_protection. Den indeholder så et tilfældigt tal, den variable bliver gemt i en session.

Men når jeg så skal validere om brugeren har indtastet den korrekte spam kode, så bliver sessionen jo sat igen, jeg ved godt jeg bare skal rykke min variable ned under validationen, men så kan jeg ikke bruge min variable.

I kan se min blog her:
http://9designs.dk/blogentry/89/

Noget kode:

Kildekode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

/* Setting  anti-spam code */
$spam_protection = rand(1,1000);

/* Setting anti-spam code into a session which is used later */
$_SESSION["spam_protection"] = $spam_protection;
			
?>			
			
What is <?php 
echo $spam_protection; echo "+"; echo $spam_protection; ?>?

<?php
if (isset($_POST["submit"])) {
echo "<br /><br />Spam protection is: $spam_protection<br />
Spam session is: $_SESSION[spam_protection]"; } ?><br />

<input type="text" name="spam_protection" /><br /><br />


Så hvordan skal dette gøres?

Jeg ønsker egentligt også råd om hvordan jeg ellers kan gøre, og hvordan min kode kan gøres pænere. Da jeg synes den er uoverskuelig lige nu.

På forhånd tak for jeres hjælp :)

Ps. der er undladt noget unødvendig kode i min kode.

Bundkort: MSI P35-NEO-F, Intel P35, LGA775
CPU: Intel Core 2 Duo E6550, BOX, LGA775
Grafikkort: ASUS Radeon HD 5830 1GB GDDR5
Harddisk: Seagate 7200.10 160GB, 8MB

2

mandag, 23. april 2007, 16:59


jeg kan ikke sige dig, hvordan koden skal være, men somregel fungere det med billeder og ikke tekst.

Grunden herfor skulle være, at en spambot ikke kan aflæse teksten i et billede (vel logisk nok).


3

mandag, 23. april 2007, 17:14


Citeret

Originally posted by Macimuz
jeg kan ikke sige dig, hvordan koden skal være, men somregel fungere det med billeder og ikke tekst.

Grunden herfor skulle være, at en spambot ikke kan aflæse teksten i et billede (vel logisk nok).


Nogle spambots kan, men jeg har brugt billeder før.

Jeg vil gerne se hvordan de håndter tekst.

Hvis de spammer så kan jeg jo bare lave noget: "What is four plus four?" istedet

Bundkort: MSI P35-NEO-F, Intel P35, LGA775
CPU: Intel Core 2 Duo E6550, BOX, LGA775
Grafikkort: ASUS Radeon HD 5830 1GB GDDR5
Harddisk: Seagate 7200.10 160GB, 8MB

4

mandag, 23. april 2007, 17:18


Citeret

Originally posted by Dumpen

Citeret

Originally posted by Macimuz
jeg kan ikke sige dig, hvordan koden skal være, men somregel fungere det med billeder og ikke tekst.

Grunden herfor skulle være, at en spambot ikke kan aflæse teksten i et billede (vel logisk nok).


Nogle spambots kan, men jeg har brugt billeder før.

Jeg vil gerne se hvordan de håndter tekst.

Hvis de spammer så kan jeg jo bare lave noget: "What is four plus four?" istedet


hvordan kan de læse et billede?


5

mandag, 23. april 2007, 17:19


Citeret

Originally posted by Macimuz

Citeret

Originally posted by Dumpen

Citeret

Originally posted by Macimuz
jeg kan ikke sige dig, hvordan koden skal være, men somregel fungere det med billeder og ikke tekst.

Grunden herfor skulle være, at en spambot ikke kan aflæse teksten i et billede (vel logisk nok).


Nogle spambots kan, men jeg har brugt billeder før.

Jeg vil gerne se hvordan de håndter tekst.

Hvis de spammer så kan jeg jo bare lave noget: "What is four plus four?" istedet


hvordan kan de læse et billede?


Det skal jeg ikke kunne sige, men jeg har set det før :-)

Jeg har desværre ikke lige umiddelbart et link.

Bundkort: MSI P35-NEO-F, Intel P35, LGA775
CPU: Intel Core 2 Duo E6550, BOX, LGA775
Grafikkort: ASUS Radeon HD 5830 1GB GDDR5
Harddisk: Seagate 7200.10 160GB, 8MB

6

onsdag, 25. april 2007, 15:29


Nu har jeg denne kode:

PHP kildekode

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
<?php

function gb($error) {
$_SESSION["calc1"] = rand(1,9); 
$_SESSION["calc2"] = rand(1,9);
if (isset($_POST["submit"])) { 
if (isset($error)) {
echo "<b>What is "$_SESSION["calc1"] ."+"$_SESSION["calc2"] ."?</b>";
}
}
else {
echo "What is "$_SESSION["calc1"] ."+"$_SESSION["calc2"] ."?";
}
$_SESSION["calcr"] = $_SESSION["calc1"]+$_SESSION["calc2"];
} 
?>

        Comment 
                <form action="#comments" method="post">
                <div style="float: left; width: 75%; position: relative;"><textarea rows="12" name="comment" cols="64"></textarea></div>

        Name<br />
                <input type="text" name="name" /><br /><br />
                
<?php 
if (isset($_POST["submit"])) { 
$calc $_POST["spam_protection"];
if ($calc != $_SESSION["calcr"]) { 
$error["calc"] = "Error"gb($error);
}
else { echo "Do post"; }
} else {
gb(0);
}


Men hvordan kan den gøres pænere og mere overskuelig?

Jeg kan ikke lige umiddelbart selv se en løsning :(

Bundkort: MSI P35-NEO-F, Intel P35, LGA775
CPU: Intel Core 2 Duo E6550, BOX, LGA775
Grafikkort: ASUS Radeon HD 5830 1GB GDDR5
Harddisk: Seagate 7200.10 160GB, 8MB

7

lørdag, 28. april 2007, 14:22


Jeg fik ordnet problemet

Jeg brugte en function der ser således ud:

PHP kildekode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* A blog entry check function */
function blogentry_validation($error) {

/* Setting $_SESSION["spam_protection"] to a random number between 1 and 9 */
$_SESSION["spam_protection"] = rand(1,9); 

/* If post submit is set */
if (isset($_POST["submit"])) { 
if ($error != 0) {
echo "<font style=\"color:red;\">What is "$_SESSION["spam_protection"] ."+"$_SESSION["spam_protection"] ."?</font>";
}
}
else {
echo "What is "$_SESSION["spam_protection"] ."+"$_SESSION["spam_protection"] ."?";
}

/* Calcuating what session spam_protection * 2 is */
$_SESSION["calcr"] = $_SESSION["spam_protection"]+$_SESSION["spam_protection"];

} 

Bundkort: MSI P35-NEO-F, Intel P35, LGA775
CPU: Intel Core 2 Duo E6550, BOX, LGA775
Grafikkort: ASUS Radeon HD 5830 1GB GDDR5
Harddisk: Seagate 7200.10 160GB, 8MB

Nyeste Videoer og Trailers

Indsend nyhed
Har du fundet en fed nyhed så indsend den så alle andre på Tweak.dk kan få glæde af den.