Vraag over sql...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Stefan

stefan

01/10/2006 02:17:00
Quote Anchor link
Hallo,

Op mijn site heb ik nu een gastenboek en een soort vraag en aanbod.

Bij het gastenboek kunnen de mensen zelf online iets neerzetten, en bij de vraag en aanbod kan iemand een advertentie plaatsen doormiddel van een formuliertje. En die gegevens worden dan in de database gezet, en ook weer uitgelezen op de vraag en aanbod pagina.

Maar ik zat allemaal te zoeken op websites etc.
Maar toen merkte ik op dat men via sql injection de site kan gaan vergallen.

Kunnen ze dat ook doen via mij vraag en aanbod en mij gastenboek?

Ik hoop dat jullie me kunnen helpen :)
Gewijzigd op 01/01/1970 01:00:00 door Stefan
 
PHP hulp

PHP hulp

18/11/2024 10:24:33
 
Lissy Pixel

Lissy Pixel

01/10/2006 08:34:00
Quote Anchor link
Om uitsluitsel te geven is het wellicht handig als je wat code hier neerzet zodat we er is naar kunnen kijken. Verder staat hier HIER ook nog de nodige informatie


edit: link aangepast
Gewijzigd op 01/01/1970 01:00:00 door Lissy Pixel
 
K i p

K i p

01/10/2006 09:07:00
Quote Anchor link
Die link geeft een error bij de gemiddelde PHPuser lissy;-) Ik begon hem al te wantrouwen toen ik de bestandsnaam zag: edittopic.php
 
Lissy Pixel

Lissy Pixel

01/10/2006 09:12:00
Quote Anchor link
Jakkes dan hier maar de code die ik als antwoord kreeg:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// zonder spaties
if (preg_match('/[\r\n,;\'"]/', $_POST['Email']) or preg_match('/[\r\n,;\'"]/', $_POST['Bericht']))
?>
 
Red Crew

Red Crew

01/10/2006 09:44:00
Quote Anchor link
Je kan dat op verschillende mannieren.

Om te beginnen kan je uw INSTERT queries al afschermen door er '' rond de values te zetten.
zoals onderstaand voorbeeld
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
    $sql2 = "INSERT INTO acteurs";
    $sql2 .= " ( voornaam, achternaam )";
    $sql2 .= " VALUES";
    $sql2 .= " ( '".$voornaam."', '".$achternaam."' );";

Als je mysql user kan aanmaken, maak je er ene aan met alleen SELECT lees rechten.
Die gebruik je voor de hele site en voor de adminpages gebruik je een login en als die succesvol is geef je ze meer rechten.
 
Stefan

stefan

01/10/2006 11:24:00
Quote Anchor link
Oke hier de code van de vraag en aanbod die hem verwerkt in de database:

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
<?php
ob_start();

if($_SERVER['REQUEST_METHOD'] == "POST")
  {

    mysql_query("INSERT INTO vraagenaanbod (product,naam,plaats,telefoonnummer,email,bericht,prijs,soort,datum) VALUES('".$_POST['product']."','".$_POST['naam']."','".$_POST['plaats']."','".$_POST['telefoonnummer']."','".$_POST['email']."','".$_POST['bericht']."','".$_POST['prijs']."','".$_POST['soort']."','".$date."')") or die ( mysql_error() );
    echo "Vraag/Aanbod geplaatst";
    
    $afzender = "From: [email protected]";
    mail($_POST['email'],'Plaatsing Advertentie','Je advertentie is geplaatst',$afzender);
  }

  
else
  {
  
        echo "<B>Vraag/Aanbod plaatsen:</b><br><br>";
        echo "<form name='veranderen' method='post'>";
        echo "Product naam:<br>";
        echo "<input type='text' name='product'><br>";
        echo "Naam:<br>";
        echo "<input type='text' name='naam'><br>";
        echo "Plaats:<br>";
        echo "<input type='text' name='plaats'><br>";
        echo "Telefoonnummer:<br>";
        echo "<input type='text' name='telefoonnummer'><br>";
        echo "Email:<br>";
        echo "<input type='text' name='email'><br>";
        echo "Extra informatie:<br>";
        echo "<textarea name='bericht' cols='40' rows='5'></textarea><br>";
        echo "Prijs:<br>";
        echo "<input type='text' name='prijs'><br>";
        echo "Aangeboden/Gezocht:<br>";
        echo "<select name='soort'><option value='Aangeboden'>Aangeboden</option><option value='Gezocht'>Gezocht</option></select><br>";
        echo "<input type='submit' name='submit' value='Vraag/Aanbod plaatsen'></form>";
    
    
  }

  
ob_end_flush();

?>
 
Andries Louw Wolthuizen

Andries Louw Wolthuizen

01/10/2006 12:11:00
Quote Anchor link
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
<?php
ob_start();

if($_SERVER['REQUEST_METHOD'] == "POST")
  {

    mysql_query("INSERT INTO vraagenaanbod (product,naam,plaats,telefoonnummer,email,bericht,prijs,soort,datum) VALUES('".htmlentities($_POST['product'])."','".htmlentities($_POST['naam'])."','".htmlentities($_POST['plaats'])."','".htmlentities($_POST['telefoonnummer'])."','".htmlentities($_POST['email'])."','".htmlentities($_POST['bericht'])."','".htmlentities($_POST['prijs'])."','".htmlentities($_POST['soort'])."','".$date."')") or die ( mysql_error() );
    echo "Vraag/Aanbod geplaatst";
    
    $afzender = "From: [email protected]";
    mail($_POST['email'],'Plaatsing Advertentie','Je advertentie is geplaatst',$afzender);
  }

  
else
  {
  
        echo "<B>Vraag/Aanbod plaatsen:</b><br><br>";
        echo "<form name='veranderen' method='post'>";
        echo "Product naam:<br>";
        echo "<input type='text' name='product'><br>";
        echo "Naam:<br>";
        echo "<input type='text' name='naam'><br>";
        echo "Plaats:<br>";
        echo "<input type='text' name='plaats'><br>";
        echo "Telefoonnummer:<br>";
        echo "<input type='text' name='telefoonnummer'><br>";
        echo "Email:<br>";
        echo "<input type='text' name='email'><br>";
        echo "Extra informatie:<br>";
        echo "<textarea name='bericht' cols='40' rows='5'></textarea><br>";
        echo "Prijs:<br>";
        echo "<input type='text' name='prijs'><br>";
        echo "Aangeboden/Gezocht:<br>";
        echo "<select name='soort'><option value='Aangeboden'>Aangeboden</option><option value='Gezocht'>Gezocht</option></select><br>";
        echo "<input type='submit' name='submit' value='Vraag/Aanbod plaatsen'></form>";
    
    
  }

  
ob_end_flush();

?>


Link van Lissy:
Klik
 
Lissy Pixel

Lissy Pixel

01/10/2006 12:20:00
Quote Anchor link
@ Andries : bedankt voor de juiste link!!!
 
Stefan

stefan

01/10/2006 12:21:00
Quote Anchor link
Hey Andries,

Door middel van die htmlentries is mijn script nu beveiligt?zodat de mensen niet kunnen rommelen als ze de gegevens naar de database worden gezet?

Thnx als dat zo is :D
Gewijzigd op 01/01/1970 01:00:00 door stefan
 
Klaasjan Boven

Klaasjan Boven

01/10/2006 13:03:00
Quote Anchor link
RedCrew:
Je kan dat op verschillende mannieren.

Om te beginnen kan je uw INSTERT queries al afschermen door er '' rond de values te zetten.
zoals onderstaand voorbeeld
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
    $sql2 = "INSERT INTO acteurs";
    $sql2 .= " ( voornaam, achternaam )";
    $sql2 .= " VALUES";
    $sql2 .= " ( '".$voornaam."', '".$achternaam."' );";

Als je mysql user kan aanmaken, maak je er ene aan met alleen SELECT lees rechten.
Die gebruik je voor de hele site en voor de adminpages gebruik je een login en als die succesvol is geef je ze meer rechten.


Dat lijkt leuk alleen dan kan iemand ook nooit een eigen item/bericht plaatsen
 
Stefan

stefan

01/10/2006 13:09:00
Quote Anchor link
Ik heb nu die htmlentities in me script gezet.

Hoe kan ik nu testen dat het daadwerkelijk werkt?
 
Benny Lava

Benny Lava

01/10/2006 13:12:00
Quote Anchor link
Ik probeer zelf altijd html in mij database te vermijden.

als je dingen in het database wilt plaatse gebruik:
strip_tags() en mysql_real_escape_string()

Als je het wilt weergeven gebruik:
htmlentities()

en dan de overige dingen zoals newline to break, ubbc ect.
 
Stefan

stefan

01/10/2006 13:28:00
Quote Anchor link
Ik heb het gedaan zoals Andries zei,

Echter waneer ik nu bijvoorbeeld <a href="sgsg">sgfsgs</a> intyp bij naam.

Wordt het toch gewoon een link op de pagina.
 
Stefan

stefan

01/10/2006 13:53:00
Quote Anchor link
Het werkt :D

Ik heb telkens de verkeerde script geupload :O

Wat ik nu dus krijg te zien is;

als iemand dit invult bij product

<a href="sgsg">sgfsgs</a>

Krijg ik bij product dit te zien
<a href="sgsg">sgfsgs</a>

En ik kan die niet aanklikken.

Dus het moet werken dan als het goed is :D
 
Benny Lava

Benny Lava

01/10/2006 13:55:00
Quote Anchor link
En om het nu helemaal goed te beveiligen,
gebruik maken van strip_tags() en mysql_real_escape_string().
 
Stefan

stefan

01/10/2006 13:56:00
Quote Anchor link
En waar moet ik die plaatsen dan?

VALUES('".htmlentities strip_tags() ($_POST['product'])."

zo?
 
Benny Lava

Benny Lava

01/10/2006 14:02:00
Quote Anchor link
'".mysql_real_escape_string(strip_tags(htmlentities($_POST['product'])))."'

zo volgens mij en dan met alle variabelen.
alleen word het wel een lange regel.

dus ik stel voor om het zo te doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$product
= mysql_real_escape_string(strip_tags(htmlentities($_POST['product'])));
?>


Dus je maakt van alle dingen een variabelen aan.

en dan word je query zoiets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
mysql_query("INSERT INTO vraagenaanbod (product,naam,plaats,telefoonnummer,email,bericht,prijs,soort,datum) VALUES('".$product."','".$naam."','"$plaats."',
// ...... gaat verder ect.
'"
.$date."')") or die ( mysql_error() );
?>
Gewijzigd op 01/01/1970 01:00:00 door Benny Lava
 
Arian Stolwijk

Arian Stolwijk

01/10/2006 14:11:00
Quote Anchor link
nee,

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
VALUES('".htmlentities(strip_tags(mysql_real_escape_string($_POST['product'])))."')
?>


Dit lijkt er meer op...
maar het is handiger als je het op deze manier doet
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
<?php
if(!empty($_POST['product']){
  $product = htmlentities(striptags(mysql_real_escape_string($_POST['product'])));
}
else{
  echo 'U moet wel een product kiezen';
}


// en dan je sql

$sql = "INSERT INTO tabel_naam (producten) VALUES ('".$product."')";
$res = mysql_query($sql);

if($res){
  echo 'Het is goed gegaan';
}
else{
  echo 'er is iets fout gegaan';
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Arian Stolwijk
 
Stefan

stefan

01/10/2006 14:15:00
Quote Anchor link
Inderdaad, naar zoiets wat Arian post zoek ik al een hele tijd, van het is goed er is fout gegaan.

Maar ik heb al verschillende dingen geprobeerd om dat toe te passen maar het lukt me maar niet.

En met dit;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
VALUES('".htmlentities(striptags(mysql_real_escape_string($_POST['product'])))."')
?>



Krijg in op de pagina te zien als ikhet wil plaatsen;

Fatal error: Call to undefined function: striptags() in (sitenaam) on line 6
Gewijzigd op 01/01/1970 01:00:00 door stefan
 
Benny Lava

Benny Lava

01/10/2006 14:17:00
Quote Anchor link
Kan ook, ik wist even de goeie volgorde niet.
 
Arian Stolwijk

Arian Stolwijk

01/10/2006 14:21:00
Quote Anchor link
@Stefan:
Die error betekend dat de functie striptages() niet bestaat...

Het is strip_tags()
typfoutje...
 

Pagina: 1 2 volgende »



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.