Hackers
Pagina: « vorige 1 2 3 4 5 volgende »
Zoiezo is het handig om niet telkens je prikbord te updaten, maar een nieuwe toe te voegen. Op die manier kun je altijd zien wie wat heeft veranderd, en wanneer ;-)
rvw schreef op 04.12.2008 15:52:
htmlentities doet wat je wilt
je doet gewoon voor dat je het je database zet htmlentities($_POST['jounaam'])
easy ?
je doet gewoon voor dat je het je database zet htmlentities($_POST['jounaam'])
easy ?
Nee, dat doe je dus niet. Je gebruikt htmlentities() pas wanneer je data uit een database haalt. Je wilt immers geen rare tekens in je database waar je niets meer mee kunt.
Je wilt dit niet in je database hebben: <b>bold</b>. Je wilt gewoon <b>bold</b> in je database hebben staan. Data manipuleren doe je pas bij de output, orginele input altijd bewaren.
Het kan altijd nog door htmlentities.
ow ja idd,
Kijk maar eens naar de voor en na delen.
@allemaal, dus ik kan beter htmlentities gebruiken bij echo ipv alvorens de DB in te kloppen?
Ja.
Dennis Mertens schreef op 04.12.2008 16:14:
Enuh Dennis, er bestaat ook iets zoals strip_tags en htmlspecialchars :)
Kijk maar eens naar de voor en na delen.
Kijk maar eens naar de voor en na delen.
2 Functies die je als het goed is nooit nodig hebt (al hoewel er uitzonderlijke situaties zijn waarin htmlspecialschars() wel dienst kan doen)
hoe sla jij ' en " op in je db newbie?
rvw schreef op 04.12.2008 16:18:
Vraag is gericht aan Newbie, maar dat kan gewoon met mysql_real_escape_string..hoe sla jij ' en " op in je db newbie?
Wat de basis is van PHP/SQL..
Gewijzigd op 01/01/1970 01:00:00 door RvW Of toch niet
Zoals gezegd door Evert kun je een ' en " gewoon in je database opslaan als ' en ". De functie mysql_real_escape_string() zorgt ervoor dat de karakters tijdelijk ge-escaped worden, maar gewoon un-escaped in je database terecht komen.
En database heeft er namelijk geen enkel probleem mee als er een ' of " in de database staat. Een database heeft er pas problemen mee als je een ' en een query zet.
Edit:
rvw schreef op 04.12.2008 16:22:
ik gebruik altijd de pdo prepare.
Helemaal perfect. Dan worden karakters automatisch ge-escaped, heb je dus geen enkele van al die functies meer nodig.
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
Toen ik begon iig wel.
Quote:
Denk dat je daar zelf snel genoeg achter komt als beginner als je eens een testberichtje gaat invoegen in je zelfgemaakte nieuwssysteem/cms/weetikveel.Alleen dat wel te weinig wordt vermeld in beginnende tutorials.
Toen ik begon iig wel.
Toen ik begon iig wel.
Quote:
Ik ook. :-) Weet eigenlijk niet waarom, werkt wel lekker vind ikzelf.ik gebruik altijd de pdo prepare.
Ik heb alles zo uitgevoerd zoals jullie mij hebben uitgelegd,
kan ik mijn website nu beschouwen als zijnde voldoende veilig?
Post hier even je script. Dan kunnen we veel gemakkelijk zien of er fouten in zitten dan wanneer we zelf moeten gaan testen op je server.
@ Hieronder: Nee, als je het doet, moet je het wel goed doen. Alles waar My voor staat, dumpen. Neem dan gewoon gelijk pgSQL ;-)
En natuurlijk MySQLi in plaats van MySQL als je nu begint met een project :)
Chris Kortaan schreef op 04.12.2008 16:37:
PDO is te omslachtig naar mijn idee.. Een class per soort SQL werkt beter (dus aparte MySQL, pgSQL, Oracle class..)
@ Hieronder: Nee, als je het doet, moet je het wel goed doen. Alles waar My voor staat, dumpen. Neem dan gewoon gelijk pgSQL ;-)
@ Hieronder: Nee, als je het doet, moet je het wel goed doen. Alles waar My voor staat, dumpen. Neem dan gewoon gelijk pgSQL ;-)
Even een kopietje van wat ik gister ergens ander had gepost:
Quote:
Jawel, want je zult alsnog veel queries moeten aanpassen als je een andere backend gaat gebruiken. En gezien dat vaak niet gebeurt, is het veel efficienter om er iets lightweights achter te hangen, in plaats van de hele overhead van PDO.
Quote:
Met PDO scheer je ze juist niet over één kam vanwege de adapters. Ga eens lezen over het Adapter design pattern, want ik mis argumentatie. Bedenk ook dat er een reden is dat iedereen in heel PHP, Java, etc, etc, gebruik maakt van PDO-achtige dingen.
Jawel, want je zult alsnog veel queries moeten aanpassen als je een andere backend gaat gebruiken. En gezien dat vaak niet gebeurt, is het veel efficienter om er iets lightweights achter te hangen, in plaats van de hele overhead van PDO.
PDO is niet bedoeld om gemakkelijk van back-end te kunnen veranderen, dat is gewoon een bijkomende optie die je (inderdaad) eigenlijk niet zult (kunnen) gebruiken.
Waarom dan wel PDO? PDO is gewoon een database classe met daarin alle voordelen van een classe. Een kort voorbeeldje:
Code (php)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
$pagina = new pagina;
$error = new error;
try
{
$db = new PDO('mysql:host=localhost;dbname=x', 'x', 'x');
$db->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e)
{
$error->addError(1, $e->getFile(), $e->getLine(), $e->getMessage());
if(DEBUG == 1)
{
$pagina->setContent = $error->showLastError();
}
}
if($error->getErrors(1) < 1)
{
try
{
$sql = "SELECT
id,
naam
FROM
paginas";
$pagina->addContent('<h1>Bewerk pagina\'s</h1>
<p>
<form method="post" action="pagina.php">
<select name="pagina">
<option value="0">Selecteer een pagina</option>');
foreach($db->query($sql) as $result)
{
$pagina->addContent('<option value="'.$result['id'].'">'.htmlentities($result['naam']).'</option>');
}
$pagina->addContent(' </select>
</form>
</p>');
}
catch (PDOException $e)
{
$pagina->addContent('Het formulier kan niet getoond worden');
$error->addError(2, $e->getFile(), $e->getLine(), $e->getMessage());
if(DEBUG == 1)
{
$pagina->addContent($error->getLastError());
}
}
}
?>
$pagina = new pagina;
$error = new error;
try
{
$db = new PDO('mysql:host=localhost;dbname=x', 'x', 'x');
$db->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e)
{
$error->addError(1, $e->getFile(), $e->getLine(), $e->getMessage());
if(DEBUG == 1)
{
$pagina->setContent = $error->showLastError();
}
}
if($error->getErrors(1) < 1)
{
try
{
$sql = "SELECT
id,
naam
FROM
paginas";
$pagina->addContent('<h1>Bewerk pagina\'s</h1>
<p>
<form method="post" action="pagina.php">
<select name="pagina">
<option value="0">Selecteer een pagina</option>');
foreach($db->query($sql) as $result)
{
$pagina->addContent('<option value="'.$result['id'].'">'.htmlentities($result['naam']).'</option>');
}
$pagina->addContent(' </select>
</form>
</p>');
}
catch (PDOException $e)
{
$pagina->addContent('Het formulier kan niet getoond worden');
$error->addError(2, $e->getFile(), $e->getLine(), $e->getMessage());
if(DEBUG == 1)
{
$pagina->addContent($error->getLastError());
}
}
}
?>
Ik hoef niet te checken of de query wel gelukt is of niet, ik krijg geen formulier met een lege <select> omdat de query mislukt is.
Wanneer ik meerdere Query's uit wil voeren start ik gewoon een transaction uitvoeren met een rollback() in de Catch. Ik hoef dus niet iedere query opnieuw te controleren en in iedere controle bij en fout een rollback uit te voeren.
Dat is de kracht achter PDO. Niet het snel kunnen verwisselen van database, want dat gebruik je toch niet.