beste is dit een veilige manier tegen hackers ?
PHP Code:
<?php
// als er op submit werd gedrukt
if(isset($_POST['naam'])){
// variabelen
$voornaam = htmlentities($_POST['voornaam']);
$naam = htmlentities($_POST['naam']);
$email = htmlentities($_POST['email']);
$query = "INSERT INTO `petitie` (`voornaam`,`naam`,`email`)
VALUES
('$voornaam','$naam','$email')";
mysql_query($query)or die(mysql_error());
echo "bedankt om de online petitie te tekenen mijn gedacht!. <a href='index.php'>Keer terug naar overzicht</a>";
?>
<?php }else{ ?>
<form action="#" method="post">
<input name="voornaam" type="text" class="inputformstyle" value="Voornaam" />
<input name="naam" type="text" class="inputformstyle" value="Naam" />
<input name="email" type="text" class="inputformstyle" value="email" />
<input type="submit" class="submit" value="Toevoegen" />
</form>
<?php } ?>
- veilig voor sql injection
-
12-08-2011, 11:24 #1
- Berichten
- 320
- Lid sinds
- 14 Jaar
veilig voor sql injection
-
12-08-2011, 11:30 #2Particulier
- Berichten
- 555
- Lid sinds
- 15 Jaar
Re: veilig voor sql injection
Nee, dit is niet veilig genoeg.
Gebruik ook nog de functie mysql_real_escape_string()
htmlentities() codeert namelijk de enkele quotes niet automatisch, evt op te lossen met de flag ENT_QUOTES, maar veiliger is om jezelf aan te raden alle waarden die je van bezoekers hebt gekregen (GET, POST, COOKIE) en die je in een database wilt opslaan door de escape functie te halen.
-
12-08-2011, 11:39 #3
- Berichten
- 320
- Lid sinds
- 14 Jaar
Re: veilig voor sql injection
bedankt voor de tip dit is dan beter ?
$voornaam = mysql_real_escape_string(htmlentities($_POST['voornaam']));
$naam = mysql_real_escape_string(htmlentities($_POST['naam']));
$email = mysql_real_escape_string(htmlentities($_POST['email']));
-
12-08-2011, 11:43 #4
- Berichten
- 361
- Lid sinds
- 13 Jaar
Re: veilig voor sql injection
Ik heb je php-code wat herschreven Fleur. Ik hoop dat ik het een beetje goed heb uitgelegd.
PHP Code:<?php
// als er op submit werd gedrukt
// Controleer of het formulier via een POST-methode is verzonden
// Met 'isset' controleer je alleen of iets bestaat. Je controleert nog niet of er ook een waarde in staat.
// Als de naam ingevuld moet zijn om verder te kunnen moet je '&& !empty($_POST['naam'])' toevoegen
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['naam'])){
// variabelen
// mysql_real_escape_string() zorgt voor veilige invoer in de database
// zie voor meer info: http://php.net/manual/en/function.mysql-real-escape-string.php
$voornaam = mysql_real_escape_string($_POST['voornaam']);
$naam = mysql_real_escape_string($_POST['naam']);
$email = mysql_real_escape_string($_POST['email']);
// Gebruik geen backticks, de hoge komma's die Phpmyadmin toevoegt
// Voor een nette code zet je variabelen buiten de quotes
$query = "INSERT INTO petitie (voornaam,naam,email)
VALUES
('" .$voornaam ."','" .$naam ."','" .$email ."')";
mysql_query($query)or die(mysql_error());
echo "bedankt om de online petitie te tekenen mijn gedacht!. <a href='index.php'>Keer terug naar overzicht</a>";
?>
<input type="submit" class="submit" value="Toevoegen" name="knop" />
-
12-08-2011, 11:48 #5
- Berichten
- 660
- Lid sinds
- 17 Jaar
Re: veilig voor sql injection
Ik heb je php-code wat herschreven Fleur. Ik hoop dat ik het een beetje goed heb uitgelegd.
PHP Code:<?php
// als er op submit werd gedrukt
// Controleer of het formulier via een POST-methode is verzonden
// Met 'isset' controleer je alleen of iets bestaat. Je controleert nog niet of er ook een waarde in staat.
// Als de naam ingevuld moet zijn om verder te kunnen moet je '&& !empty($_POST['naam'])' toevoegen
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['naam'])){
// variabelen
// mysql_real_escape_string() zorgt voor veilige invoer in de database
// zie voor meer info: http://php.net/manual/en/function.mysql-real-escape-string.php
$voornaam = mysql_real_escape_string($_POST['voornaam']);
$naam = mysql_real_escape_string($_POST['naam']);
$email = mysql_real_escape_string($_POST['email']);
// Gebruik geen backticks, de hoge komma's die Phpmyadmin toevoegt
// Voor een nette code zet je variabelen buiten de quotes
$query = "INSERT INTO petitie (voornaam,naam,email)
VALUES
('" .$voornaam ."','" .$naam ."','" .$email ."')";
mysql_query($query)or die(mysql_error());
echo "bedankt om de online petitie te tekenen mijn gedacht!. <a href='index.php'>Keer terug naar overzicht</a>";
?>
<input type="submit" class="submit" value="Toevoegen" name="knop" />
-
12-08-2011, 11:52 #6Bedrijfgegevens op aanvraag
- Berichten
- 1.031
- Lid sinds
- 16 Jaar
Re: veilig voor sql injection
@R. Kronshorst : waarom geen backticks? Ik zie er geen nadeel in, eerder een voordeel: code leesbaarder en je ondervangt pre-reserved keywords ermee (zoals veldnaam `count`)
-
12-08-2011, 11:55 #7
- Berichten
- 320
- Lid sinds
- 14 Jaar
Re: veilig voor sql injection
bedankt voor de hulp :)
-
12-08-2011, 12:03 #8
- Berichten
- 498
- Lid sinds
- 17 Jaar
Re: veilig voor sql injection
Hoi,
Mocht je server het hebben kijk dan eens naar de PDO driver.
Die neemt veel werk al voor je uit handen neemt niet weg dat je het altijd nog moet blijven checken.
Vertrouw nooit user input.
Martijn
-
12-08-2011, 12:08 #9
- Berichten
- 361
- Lid sinds
- 13 Jaar
Re: veilig voor sql injection
Inderdaad Lodewijk, als je de info op het scherm wilt tonen moet je htmlentities() gebruiken.
Jopie, backticks worden (alleen door MySql) gebruikt om te voorkomen dat je problemen krijgt met vooraf gedefinieerde woorden zoals 'group'. De uitkomst van je query wordt heel anders als je de backticks een keer vergeet.
Daarnaast is het geen sql, maar een toevoeging van MySql. Wanneer je je query of tabellen wilt gebruiken op bijv. PostgreSql krijg je fouten.
Zie ook deze uitleg: http://www.pfz.nl/wiki/backticks/
-
12-08-2011, 18:19 #10
- Berichten
- 751
- Lid sinds
- 15 Jaar
Re: veilig voor sql injection
Nog een toevoeging van htmlentities dit moet je alleen maar gebruiken waar je data gaat tonen welke extern ingevoerd is wanneer je zelf deze data invult is het niet nodig wanneer je bijvoorbeeld een cms maakt met een html editor
backticks van mysql nooit maar dan ook nooit gebruiken!! is niet valid SQL code.
Wanneer je inderdaad van database gaat veranderd dan kun je alles lopen veranderen.
wanneer je goed wilt doen dan dien je de tabel kolom naam te prefixen.
-
12-08-2011, 18:57 #11
- Berichten
- 361
- Lid sinds
- 13 Jaar
Re: veilig voor sql injection
Plus het scheelt je code (twee backticks per element) en je kunt ze ook niet per ongeluk een keer vergeten.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic