form beveiligen tegen sql-injection

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wouter reyntjens

wouter reyntjens

05/06/2006 18:52:00
Quote Anchor link
hallo iedereen, kan iemand dit form beveiligen tegen sql injection?


bedankt


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



   if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    
// process form
$db = mysql_connect("localhost", "user", "pswrd");
mysql_select_db("databse",$db);

  $sql = "INSERT INTO vragenlijst (voornaam,familienaam,geslacht,geboortedatum,straat,nr,postcode,gemeente,voornaammoeder,familienaammoeder,voornaamvader,familienaamvader,voornaampartner,familienaampartner,telefoonprive,gsm,emailprive,telefoonwerk,emailwerk) VALUES ('$voornaam','$familienaam','$geslacht','$geboortedatum','$straat','$nr','$postcode', '$gemeente','$voornaammoeder','$familienaammoeder','$voornaamvader','$familienaamvader','$voornaampartner','$familienaampartner','$telefoonprive','$gsm','$emailprive','$telefoonwerk','$emailwerk')";

  $result = mysql_query($sql);

  echo "Bedankt voor de gegevens in te vullen, klik op index om terug naar de hoofdpagina te gaan.\n";

}
else{



  // display form



  ?>



<table>
<tr>
<td colspan="2" class="style1">

Beste familieleden,<br/><br/>


Hier dus onze vragenlijst. Zoals je ziet verzamelen we de personalia van alle leden van onze familie.<br/>
Graag zouden we hebben dat per tante, nonkel, nicht, kozijn, kind, kleinkind &#233;&#233;n zo&rsquo;n formulier wordt ingevuld.<br/>
We willen immers op termijn ook een stamboom met foto&rsquo;s maken.<br/><br/>

Velden die niet van toepassing zijn of die je niet wil invullen laat je gewoon blanco.<br/>
Als iedereen meewerkt hebben we meteen een hele recente adressenlijst van de familie die altijd actueel kan gehouden worden.<br/><br/>

Dank u <br/><br/><br/><br/>
</td>


</tr>
<tr>
<form method="post" action="">

<td class="style1">Voornaam:</td><td><input type="Text" name="voornaam"><br></td></tr>

<tr><td class="style1">Familienaam:</td><td width="40%"><input type="Text" name="familienaam"><br></td></tr>

<tr><td class="style1">Geslacht:</td><td width="40%"><input type="Text" name="geslacht"><br></td></tr>

<tr><td class="style1"> Geboortedatum:</td><td width="40%"><input type="Text" name="geboortedatum"><br></td></tr>

<tr><td class="style1"> Straat:</td><td width="40%"><input type="Text" name="straat"><br></td></tr>

<tr><td class="style1"> Nr:</td><td width="40%"><input type="Text" name="nr"><br></td></tr>

<tr><td class="style1"> Postcode:</td><td width="40%"><input type="Text" name="postcode"><br></td></tr>

<tr><td class="style1"> Gemeente:</td><td width="40%"><input type="Text" name="gemeente"><br></td></tr>

<tr><td class="style1"> Voornaam moeder:</td><td width="40%"><input type="Text" name="voornaammoeder"><br></td></tr>

<tr><td class="style1"> Familienaam moeder:</td><td width="40%"><input type="Text" name="familienaammoeder"><br></td></tr>

<tr><td class="style1"> Voornaam vader:</td><td width="40%"><input type="Text" name="voornaamvader"><br></td></tr>

<tr><td class="style1"> Familienaam vader:</td><td width="40%"><input type="Text" name="familienaamvader"><br></td></tr>

<tr><td class="style1"> Voornaam partner:</td><td width="40%"><input type="Text" name="voornaampartner"><br></td></tr>

<tr><td class="style1"> Familienaam partner:</td><td width="40%"><input type="Text" name="familienaampartner"><br></td></tr>

<tr><td class="style1"> Telefoon prive:</td><td width="40%"><input type="Text" name="telefoonprive"><br></td></tr>

<tr><td class="style1"> Gsm nummer:</td><td width="40%"><input type="Text" name="gsm"><br></td></tr>

<tr><td class="style1"> Email prive:</td><td width="40%"><input type="Text" name="emailprive"><br></td></tr>

<tr><td class="style1"> Telefoon werk:</td><td width="40%"><input type="Text" name="telefoonwerk"><br></td></tr>

<tr><td class="style1"> Email werk:</td><td width="40%"><input type="Text" name="emailwerk"><br></td></tr>

</table>



<input type="Submit" name="submit" value="Verzend">

</form>



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php



} // end if



?>
 
PHP hulp

PHP hulp

28/11/2024 19:30:51
 
Frank -

Frank -

05/06/2006 18:55:00
Quote Anchor link
Een formulier kun je niet beveiligen (iedereen kan deze aanpassen in zijn browser), de input die jij op de server ontvangt, kun je wel beveiligen. Lees het volgende artikel eens en ga er mee aan de slag: http://www.phphulp.nl/php/tutorials/3/244/

En begin je script met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

// rest van je script
?>
 
Jan Koehoorn

Jan Koehoorn

05/06/2006 19:13:00
Quote Anchor link
Ik include meestal dit bestand bovenin pagina's die formulierinfo moeten verwerken:
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
<?php
  // bescherming tegen mysql injection
  function quote_smart($value)
  {

      if (get_magic_quotes_gpc()) {
          $value = stripslashes($value);
      }

      if (version_compare(phpversion(), "4.3.0") == "-1") {
          return mysql_escape_string($value);
      }
else {
          return mysql_real_escape_string($value);
      }
  }
  
  function
check_array(&$array)
  {

      foreach ($array as $key => $value) {
          $value = quote_smart($value);
          $array[$key] = $value;
      }
  }

  
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      check_array($_POST);
  }

  if ($_SERVER['REQUEST_METHOD'] == 'GET') {
      check_array($_GET);
  }

?>
 
Wouter reyntjens

wouter reyntjens

05/06/2006 20:15:00
Quote Anchor link
thanks jan en frank
 
Michael -

Michael -

05/06/2006 21:30:00
Quote Anchor link
@ Jan, als ik nou bijv een pagina heb met:
Jou bericht:
$_GET['bericht']

dan is dit bericht gelijk 'veilig'?

Wel erg handig dan en scheelt een heleboel typ werk!
 
Frank -

Frank -

05/06/2006 21:34:00
Quote Anchor link
Probeer het zelf eens uit, zet eens een ' of / in de url (?bericht=23' ) en kijk wat het resultaat is.

Dit is een redelijk eenvoudig, maar zeer doeltreffend stuk script, maar je kunt nooit zomaar een script van een ander vertrouwen. Iedereen kan fouten maken, ook Jan.

Maar het is een fraai stukje code, kun je niets van zeggen! Tot het tegendeel is bewezen...
 
Michael -

Michael -

05/06/2006 21:54:00
Quote Anchor link
dat is waar ;) Maar alles $_GET['iets'] maak ik altijd htmlspecialchars($_GET['iets']) van.. met dit script zou dat dus niet nodig zijn?

edit: bij mij doet ie het trouwens niet. Ik krijg het volgende:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\AppServ\www\test.php on line 11

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\AppServ\www\test.php on line 11
Gewijzigd op 01/01/1970 01:00:00 door Michael -
 
Frank -

Frank -

05/06/2006 21:57:00
Quote Anchor link
htmlspecialchars() converteert &, <, >, ' en " naar hun html-entiteiten. Dat wil je zelden of nooit in je database hebben, deze dat is niet bruikbaar voor een ander medium. Of wil jij graag &amp; in je bijvoorbeeld je pdf-jes hebben waar een & hoort te staan? Ik niet.

htmlspecialchars() heb je dus niets aan.
 
Michael -

Michael -

05/06/2006 22:19:00
Quote Anchor link
Ik zet het niet met htmlspecialchars in de db, maar haal het er zo uit. Maar goed. Wat kan ik daarvoor beter gebruiken dan? Want ik wil niet alleen Mysql injection tegen gaan, maar ook dat je geen scripts kunt uitvoeren.

url: iets=<script>alert("hehe");</script>

echo $_GET['iets'];

moet dus zowieso niet werken, en dit heb ik dus met htmlspecialchars nu wel voorkomen.
 
Frank -

Frank -

05/06/2006 22:24:00
Quote Anchor link
strip_tags() lijkt mij een betere, zie de handleiding.
 
Michael -

Michael -

05/06/2006 22:40:00
Quote Anchor link
hm, apparte functie. Hij stript dus letterlijk alle tags.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$string
= strip_tags($_GET['iets']);
echo $string;
?>

Url: iets=<script>alert("test");</script>
Echo: alert(\"test\");
Url daarna: iets=%3Cscript%3Ealert(%22test%22);%3C/script%3E

Dit betekent ook dat als je dit voor het forum en gb enzo gebruikt dat je niet eens een stukje code kan laten zien zoals op dit forum. Ook wel weer lastig, maar wel veilig natuurlijk. Ik denk dat ik dit zowieso voor titels en andere kleine input velden gebruik maar voor bericht niet echt handig.
 



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.