login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Veilig code in database

Offline marten - 02/08/2006 20:42
Avatar van martenBeheerder Wat doen jullie om je code veilig in een database te zetten?

Dus HTML code in database, PHP enz enz?

19 antwoorden

Gesponsorde links
Offline Voldemort - 02/08/2006 20:43 (laatste wijziging 02/08/2006 20:46)
Avatar van Voldemort PHP ver gevorderde
  1. <?php
  2. $var = htmlentities($_POST['ding'],ENT_QUOTES);
  3.  
  4. $query = "INSERT INTO tabel(`ding`)
  5. VALUES('".$var."')";
  6. $result = mysql_query($query);
  7.  
  8. //Zo doe ik het altijd en heb er nog nooit problemen met gehad
  9. ?>


Hiermee ga je nooit kwaadaardige code krijgen (als je het altijdin je $_POST vars toepast, $_GET en $_COOKIE moet je ook altijd controleren).

Owja: Gebruik geen addslashes of stripslashes, want dan krijg je problemen met bv. magic_quotes_gpc instelling in php.ini.
Offline gothmog - 02/08/2006 20:43
Avatar van gothmog Lid Enige wat ik gebruik is:
htmlspecialchars()
http://www.site...&id=12
Offline marten - 02/08/2006 20:56
Avatar van marten Beheerder
Citaat:
Owja: Gebruik geen addslashes of stripslashes, want dan krijg je problemen met bv. magic_quotes_gpc instelling in php.ini.


Je kan controleren of je magic quotes aan of uit hebt staan in je script ;)
Offline Voldemort - 02/08/2006 20:58
Avatar van Voldemort PHP ver gevorderde @marten: Weet ik, maar dan moet je nog overal extra code gebruiken voor zo'n stomme check.
Offline marten - 02/08/2006 21:03
Avatar van marten Beheerder Stomme check? Het gaat erom dat het veilig is ;) dan doe ik liever een if else controle meer dat het veilig is niet
Offline Voldemort - 02/08/2006 21:06
Avatar van Voldemort PHP ver gevorderde Het kan veel simpelder door gewoon htmlentities(,ENT_QUOTES) dan zo'n stomme check en altijd add/stripslashes door je code te halen. Kost allemaal extra serverload.
Offline ikkedikke - 02/08/2006 21:33
Avatar van ikkedikke PHP expert of gewoon uitzetten..
Offline Stijn - 02/08/2006 21:38
Avatar van Stijn PHP expert of PHP.net: mysql_real_escape_string
Offline Ultimatum - 03/08/2006 00:16
Avatar van Ultimatum PHP expert ik gebruik altijd addslashes(); & stripslashes(); , is dit veilig genoeg of raden jullie me wat anders aan (open voor suggesties )
Offline Voldemort - 03/08/2006 11:12
Avatar van Voldemort PHP ver gevorderde @Ultimatum: Lees dit eens door: http://www.phpf...amp;page=3

@ikkedikke: Ik denk niet dat je toegang tot de php.ini van je host hebt.

@stijn1989: Toch vind ik htmlentities beter omdat je dan ook geen foutieve broncode hebt (& wordt automatisch &amp; etc, bij die functies niet).
Offline Richard - 03/08/2006 13:55
Avatar van Richard Crew algemeen Voldemort: aub leer wat meer over PHP. Jij zet nu alles veel groter in de database, htmlentities etc. hoor je pas bij output te doen.

http://www.site...mp;id=1068

als je dit script uitvoert in een 'common' bestand (altijd geinclude dus), hoef je alleen maar mysql_real_escape_string te gebruiken voor veiligheid in queries.

ik hoor het je al zeggen: 'extra serverload'. niet dus, dit is veel beter voor de server, en veiliger, en compatibel met alle andere servers
Offline ikkedikke - 03/08/2006 15:12
Avatar van ikkedikke PHP expert er bestaat ook nog iets als .htaccess, daarmee is ook een hoop te regelen wat php configuratie betreft. je moet alleen even naar je host om dat aanpasbaar te maken.
Offline gijs - 03/08/2006 15:28
Avatar van gijs HTML beginner Ik gebruik altijd strip_tags als ik input in mijn database zet..
Offline haytjes - 03/08/2006 15:49 (laatste wijziging 03/08/2006 15:52)
Avatar van haytjes Gouden medailleGouden medaille

JS gevorderde
het beste is gewoon PHP.net: mysql_escape_string te doen met alles dat je in de database zet.

Daarna is het inderdaad beter voor de output om PHP.net: htmlspecialchars of PHP.net: htmlentities te doen, zodat je geen XSS-exploits maakt.

@gijs: Het is voor XSS-exploits idd wel goed om PHP.net: strip-tags te doen, maar hierdoor heb je nog altijd problemen met SQL-injection.
Je moet dus altijd iets doen dat ' escaped. Hoe je dat doet maakt niet uit, maar mijn voorkeur gaat naar PHP.net: mysql_escape_string, omdat dit een speciale mysql functie is. Dus dit gaat de job wel goed doen.
Offline Thomas - 03/08/2006 16:07
Avatar van Thomas Moderator Het hangt er maar helemaal vanaf wat je vervolgens met de code/HTML gaat/wilt doen (en hoe je hier mee omgaat).

Het zou dus helpen als je aan kunt geven wat de bedoeling is van de opgeslagen HTML/PHP/whatever.
Offline Ultimatum - 03/08/2006 16:27
Avatar van Ultimatum PHP expert @haytjes als je dan mysql_escape_string zou gebruiken, hoe haal je de \ weer weg als je wilt laten zien in bv een tabel dan, is daar een tegenhanger van (vb stripslashes(); & addslashes();) of volstaat stripslashes dan?

en is mysql_escape_string alleen genoeg of is het verstandiger om het samen met iets te doen zodat alle input veilig is?
Offline haytjes - 03/08/2006 16:31
Avatar van haytjes Gouden medailleGouden medaille

JS gevorderde
nep, je moet daarachter niets meer doen. Het zet gewoon voor alle ' een \. Dit wordt vanzelf weggedaan:

bv.
$var = 'dit is een var\' blabla'

snapje
Offline marten - 03/08/2006 18:43
Avatar van marten Beheerder
Citaat:
Het zou dus helpen als je aan kunt geven wat de bedoeling is van de opgeslagen HTML/PHP/whatever.


Laten we zeggen een pagina systeem dat de admin zijn eigen pagina code kan maken
Offline nemesiskoen - 03/08/2006 18:47
Avatar van nemesiskoen Gouden medaille

PHP expert
Urgh... als de admin (jij dus) alles in de db pompt zullen we ervanuit gaan dat deze info veilig is (als dit niet zo is mag je je eerder zorgen gaan maken over de beveiliging van je cookies/logingegevens). Dan volstaat dus wat haytjes zegt en moet er (IMO) niet ge'htmlspecialchar'd/entities doen omdat je misschien html wilt opslaan.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.289s