zoekveld
Ik gebruik daarvoor
$zoeken = explode(" ", $_POST['zoeken']);
foreach ($zoeken as $zoek) {
WHERE veld LIKE '%" . $zoek. "%'"; }
Dus als ik in de veld type: graag gedaan, zoek die op graag en op gedaan
hoe kan ik als in de veld typ: graag+gedaan dat die zoekt op "graag gedaan"
Gewijzigd op 21/06/2013 09:42:28 door Francoi gckx
$zoeken = explode(" ", $_POST['zoeken']);
$zoeken = str_replace("+"," ",$zoeken );
over sql injection maak ik mij hier niet zorgen om dit is toch in de admin gedeelte
Francoi gckx op 21/06/2013 11:05:40:
Bedankt maar ik heb het al
$zoeken = explode(" ", $_POST['zoeken']);
$zoeken = str_replace("+"," ",$zoeken );
over sql injection maak ik mij hier niet zorgen om dit is toch in de admin gedeelte
$zoeken = explode(" ", $_POST['zoeken']);
$zoeken = str_replace("+"," ",$zoeken );
over sql injection maak ik mij hier niet zorgen om dit is toch in de admin gedeelte
Kleine moeite om je $zoeken door mysql_real_escape_string() te halen om injectie te verkomen, maar als je niet voor veiligheid wil gaan is dat je eigen risico. En omdat het een 'admin' gedeelte is, betekend niet dat het een veilige omgeving is!
hmm werkt mysql_real_escape_string() ook nog met pdo, dan vind ik het een kleine moeite?
Francoi gckx op 21/06/2013 11:11:10:
hmm werkt mysql_real_escape_string() ook nog met pdo, dan vind ik het een kleine moeite?
Nee met PDO gebruik je prepare ipv query om SQL injectie tegen te gaan.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
// De manier waarop je het waarschijnlijk nu doet.
$dbc->query("Je query hier");
// De veilige manier
$dbc->prepare("Je query hier");
?>
// De manier waarop je het waarschijnlijk nu doet.
$dbc->query("Je query hier");
// De veilige manier
$dbc->prepare("Je query hier");
?>
Gewijzigd op 21/06/2013 11:18:25 door Chris PHP
return $match_zoeken = $dbo->query($sql);
dus als ik 2 regels extra toevoeg
$dbo->query($sql);
$dbo->prepare($sql);
return $match_zoeken = $dbo->execute();
is die beveiligd?
Francoi gckx op 21/06/2013 11:05:40:
over sql injection maak ik mij hier niet zorgen om dit is toch in de admin gedeelte
escapen beschermt je niet alleen tegen hackers.
Het is nodig om ' en " te escapen.
Neem nu dat de admin dit wil schrijven:
De raad heeft beslist: "Er worden geen foto's getrokken"
Als je dat niet escapet, mislukt je query.
---
Verder is het gewoon flauw om die kleine, extra moeite achterwege te laten voor admin panelen.
Als het niet als 100% natuurlijk komt om het altijd te doen, zal je het vergeten wanneer het echt nodig is.
Francoi gckx op 21/06/2013 11:19:55:
de query wordt gemaakt in een functie
return $match_zoeken = $dbo->query($sql);
dus als ik 2 regels extra toevoeg
$dbo->query($sql);
$dbo->prepare($sql);
return $match_zoeken = $dbo->execute();
is die beveiligd?
return $match_zoeken = $dbo->query($sql);
dus als ik 2 regels extra toevoeg
$dbo->query($sql);
$dbo->prepare($sql);
return $match_zoeken = $dbo->execute();
is die beveiligd?
Nee deze $dbo->query($sql); verwijderen anders draai je de query 2x, eenmaal 'beveiligd' en eenmaal 'onbeveiligd'
Toevoeging op 21/06/2013 11:33:50:
Maar als je over je hele site PDO gebruikt, is dus niets ge-escaped en ben je vatbaar voor injectie. Anders had je wel geweten hoe je gebruik maakt van prepare.
Loop je query's na en beveilig ze, net wat Kris zegt het is niet alleen tegen injectie.
Ik zou dus ook alle $_POST door html purifier halen?
http://htmlpurifier.org/ is die dan voldoende sqlinjectie vrij?
$zoeken = explode(" ", $purifier->purify($_POST['zoeken']));
$zoeken = str_replace("+"," ",$zoeken );
is dat genoeg?
Toevoeging op 21/06/2013 11:38:15:
Chris NVT op 21/06/2013 11:31:42:
Maar als je over je hele site PDO gebruikt, is dus niets ge-escaped en ben je vatbaar voor injectie. Anders had je wel geweten hoe je gebruik maakt van prepare.
Loop je query's na en beveilig ze, net wat Kris zegt het is niet alleen tegen injectie.
Maar als je over je hele site PDO gebruikt, is dus niets ge-escaped en ben je vatbaar voor injectie. Anders had je wel geweten hoe je gebruik maakt van prepare.
Loop je query's na en beveilig ze, net wat Kris zegt het is niet alleen tegen injectie.
Ik heb prepare voornamelijk gebruikt bij: Update, Toevoegen en Delete en dan met bindparam
maar niet echt bij ophaal queryies
Gebruik gewoon prepare, dan zit je goed is onderdeel van PDO dus waarom een extra tool gebruiken?
Ook prepare gebruiken bij ophalen van queries! Anders kan ik in je zoek formulier je originele query afbreken en alles ophalen uit je users tabel bijvoorbeeld. Of ik drop je complete database.
Gewijzigd op 21/06/2013 11:43:55 door Chris PHP
ff nog dus met ophaal query zoals zoeken en zo
is het gewoon een kwestie van $dbo->query($sql); te veranderen
in
$dbo->prepare($sql);
$dbo->execute();
zonder bindparams of wat dan ook
dit maakt mij afvragen waar $dbo->query($sql); dan voor gebruikt kan worden
$result = mysql_query ( "SELECT * FROM " . $tbl_name . " WHERE (Boekjaar = $Boekjaar AND Rekeninghouder = '......') ORDER BY TransactieID DESC LIMIT 5000" );
begrijp ik het goed als ik query moet vervangen voor prepareer. Of moet ik toch nog iets anders toevoegen.
Graag jullie visie.
Ja en dan $result ->execute();
Francoi gckx op 21/06/2013 11:57:35:
Ja en dan $result ->execute();
Nee niet in zijn geval, hij maakt gebruik van mysql_* en geen PDO.
Hij kan dus geen prepare gebruiken maar moet al zijn variabelen en andere input escapen met mysql_real_escape_string();
Overigens zal hij dan mysql_fetch_assoc(); moeten gebruiken, en niet $result-execute();
Gewijzigd op 21/06/2013 12:22:23 door Chris PHP
Overigens is het niet zo dat je persee preps moet gebruiken om SQL injectie te voorkomen, er is ook nog PDO::quote en integer waardes kan je gewoon simpel met (int) beveiligen.
Ik heb verderop in mijn script dit staan:
while ($data = mysql_fetch_assoc($result)):
{
{ echo ' ..........
Dus dat is 1 item wat ik van Chris begrijp. Maar waar moet ik mysql_real_escape_string(); plaatsen?
Helemaal onderaan waar ik nu heb staan:
mysql_close($con);
?>
Met andere woorden, als ik de connectie heb gesloten? Of al eerder? Direct na b.v. de query?
En wat doe deze instructie? Wat escape je feitelijk hiermee? (voor beter begrip van het script en wat hij doet).
Bedankt.
dit is mijn topic:(
Als je bijvoorbeeld $_POST waardes hebt vanuit een formulier plaats je die in je mysql_real_escape_string();
Dus bijvoorbeeld
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
// Als je variabelen gebruikt
$username = mysql_real_escape_string($_POST['username']);
// Als je het rechtstreeks is je query zet (bij voorkeur deze optie)
$query = mysql_query("SELECT username, pass FROM users WHERE username=". mysql_real_escape_string($_POST['username']). " AND password=".mysql_real_escape_string($_POST['password'])."");
?>
// Als je variabelen gebruikt
$username = mysql_real_escape_string($_POST['username']);
// Als je het rechtstreeks is je query zet (bij voorkeur deze optie)
$query = mysql_query("SELECT username, pass FROM users WHERE username=". mysql_real_escape_string($_POST['username']). " AND password=".mysql_real_escape_string($_POST['password'])."");
?>
@Francoi
Sorry maar wij helpen iedereen op dit forum, of het nu in een 'andermans' topic is of in hun eigen topic. Ook jij wordt nog steeds geholpen als je vragen hebt, en we natuurlijk een antwoord of optie hebben.
Een 12 jarige zou z'n opmerking maken
Gewijzigd op 21/06/2013 12:45:27 door Chris PHP
maar hij kan toch beter mysqli of pdo gebruiken
Francoi gckx op 21/06/2013 13:05:49:
maar hij kan toch beter mysqli of pdo gebruiken
Dat is zeker zo, mysqli_* is bijna hetzelfde als mysql_* dus dat zou een makkelijke overstap zijn. Echter is PDO een goede oefening als je ooit wat met OOP (Object Oriented Programming) wil gaan doen.