Veilige code

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Ed van Papenrecht

Ed van Papenrecht

16/08/2011 13:30:08
Quote Anchor link
Hoi Iedereen,

Ik ben bezig met een website, waarbij de bezoeker een vragenlijst in moet vullen. Aan de hand van de antwoorden in deze vragenlijst worden ze doorgestuurd naar een resultaat. Tussen de vragenlijst en het resultaat heb ik een pagina gemaakt, die de ingevulde gegevens in de database verwerkt en daarna kijkt welke antwoord ze op een vraag hebben gegeven, om de bezoeker zo naar de goede uitslag door te verwijzen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
if (isset($_POST['submit'])) {
                
    $voornaam = $_POST["voornaam"];
    $achternaam = $_POST["achternaam"];
    $geboortedatum = $_POST["geboortedatum"];
    $email = $_POST["email"];
    $woonplaats = $_POST["woonplaats"];
    $telefoon = $_POST["telefoon"];
    $vestiging = $_POST["vestiging"];
    $datum = date ('d-m-Y');
    $interesse =$_POST["interesse"];
    $smaak = $_SESSION['vraag'];
    $voorwaarden = $_POST["voorwaarden"];
                
    $query ="INSERT INTO klanten (voornaam, achternaam, geboortedatum, email, woonplaats, telefoon, vestiging, interesse, datum, smaak, voorwaarden)";
    $query.="VALUES ('";
    $query.= mysql_real_escape_string ($voornaam) ."','";
    $query.= mysql_real_escape_string ($achternaam) ."','";
    $query.= mysql_real_escape_string ($geboortedatum) ."','";
    $query.= mysql_real_escape_string ($email) ."','";
    $query.= mysql_real_escape_string ($woonplaats) ."','";
    $query.= mysql_real_escape_string ($telefoon) ."','";
    $query.= mysql_real_escape_string ($vestiging) ."','";
    $query.= mysql_real_escape_string ($interesse) ."','";
    $query.= mysql_real_escape_string ($datum)."','";
    $query.= mysql_real_escape_string ($smaak)."','";
    $query.= mysql_real_escape_string ($voorwaarden) ."');";
    $result = mysql_query($query) or die ("FOUT: " .mysql_error());
                
    }


$antwoord_vraag1 = $_SESSION['vraag'];

    if (isset($_POST["submit"])){
        
        if($antwoord_vraag1 == 1){
            header ("location:uitslag_1.php");
        }

        
        if($antwoord_vraag1 == 2){
            header ("location:uitslag_2.php");
        }

        if($antwoord_vraag1 == 3){
            header ("location:uitslag_3.php");
        }

        if($antwoord_vraag1 == 4){
            header ("location:uitslag_4.php");
        }
    }
//}
?>


Op de uitslag pagina, begin ik met een script die een mail met bijlage verstuurd, zodat ze de uitslag ook via e-mail in pdf formaat binnen krijgen. Daarna wordt de website weer gegeven. Refresh je de pagina, dan wordt je doorgestuurd naar de index, om ze geen dubbele mails te versturen als je op f5 drukt:)

Mijn vraag is, of de code hierboven op een veilige manier is geschreven, om database injecties en spam tegen te gaan. Ik maak gebruik van PHPMailer om de mails te versturen.

Bedankt alvast!

grt.
 
PHP hulp

PHP hulp

21/11/2024 21:16:50
 
Pim -

Pim -

16/08/2011 13:33:40
Quote Anchor link
Quote:
Refresh je de pagina, dan wordt je doorgestuurd naar de index, om ze geen dubbele mails te versturen als je op f5 drukt:)

Hoe heb je dit geregeld?
Denk eraan altijd exit() te gebruiken na een redirect.
 
Ed van Papenrecht

Ed van Papenrecht

16/08/2011 13:36:57
Quote Anchor link
Misschien dat ik hier te makkelijk over heb gedacht. Als de pagina helemaal geladen is gooit hij de sessie leeg. Bij een refresh kijk ik voordat de pagina wordt geladen of er op submit is gedrukt. Is dit niet het geval dat is de location index.php.

Zie de code hieronder:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$submit
= $_SESSION['submit'];

if ($submit =="")
    {

        header ("location:index.php");
    }

?>
 
Pim -

Pim -

16/08/2011 13:42:17
Quote Anchor link
Je kan dan nog steeds geautomatiseerd spammen, maar de spammer moet dan alleen gewoon steeds eerst het formulier opvragen, zodat de sessie variabele wordt gevuld en dan het formulier verzenden... Een captcha is misschien beter.
 
Ed van Papenrecht

Ed van Papenrecht

16/08/2011 13:47:40
Quote Anchor link
Mmmm dat moet je me even uitleggen...Als je wilt.

Ik dacht hiermee namelijk het probleem te hebben opgelost, omdat ze bij een Refresh terug worden gestuurd naar de eerste pagina.. Om de email dus weer te versturen, dien je eerst heel de test weer te doorlopen, je gegevens invullen en op submit drukken..
 
- SanThe -

- SanThe -

16/08/2011 13:52:03
Quote Anchor link
Je controleert verder geen enkele input. Is de geboortedatum wel een geldige datum en niet 31-02-2000? Dit: $datum = date ('d-m-Y'); is géén datum maar tekst. Hier kan je dan ook nooit op sorteren. Enz.

Edit: Het is zo te zien mogelijk om helemaal niks in te vullen. Dan wordt het alsnog in de database gezet.
Gewijzigd op 16/08/2011 13:55:31 door - SanThe -
 
Ed van Papenrecht

Ed van Papenrecht

16/08/2011 13:58:11
Quote Anchor link
Dank je wel voor je reactie,

Voor de geboortedatum wordt alleen het jaartal gevraagd. Deze kan je selecteren uit een selectbox. Daarnaast vindt er via een Jquery-script een validatie plaats, waarbij wordt gecontroleerd op juiste telefoonnummer, juist e-mail adres etc etc.. Pas als dit goed is ga je naar bovenstaande pagina, die alles verwerkt.

Ik ben daarom van mening dat ik dit niet nomaals hoef te controleren op deze pagina. Omdat men met onjuiste gegevens deze pagina niet kan bereiken. En er dus ook geen onjuiste gegevens in de database kan komen.

Is de code verder wel database-injection veilig?
 
Jacco Brandt

Jacco Brandt

16/08/2011 14:07:13
Quote Anchor link
En wat gebeurd er dan als een gebruiker(zoals een bot) geen javascript heeft ingeschakeld?

Uw code is wel goed beschermt tegen SQL-Injectie.
 
Ed van Papenrecht

Ed van Papenrecht

16/08/2011 14:15:57
Quote Anchor link
Das inderdaad een goede, niet echt aan gedacht... stom.
Net getest door mijn javascript uit te zetten, maar inderdaad.. Men komt dan gewoon op de pagina met onjuiste gegevens...

Wordt het toch nog een validatie schrijven in php, even uitzoeken hoe ik dit het beste kan doen.. bedankt voor de tip!
 
Obelix Idefix

Obelix Idefix

16/08/2011 16:49:41
Quote Anchor link
Controleren of een formulier is verstuurd doe je met if($_SERVER['REQUEST_METHOD'] == "POST")

Waarom maak je op regel 4 t/m variabelen aan?
Je kunt die stap overslaan en direct in de query met $_POST werken.

Waarom geen nette foutafhandeling als de query niet lukt?

Waarom $submit = $_SESSION['submit']; ?

Je code is, zoals Jacco Brandt aangeeft op zich beschermt, maar netjes is het nog niet.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.