#1 před 3 lety

Kenn
Člen
Registrovaný: 27. 1. 2009
Příspěvky: 130

Vkládání PHP kódu

Trošku si tu hraju s Texy a obarvováním kódu přes FSHL a řeším problém.

Při vkládání do databáze mi nejde vložit php kód, který má apostrofy. Uvozovky se slashují, jenže apostrofy ne. Přemýšlel jsem, kam tento post hodit a nakonec jsem ho hodil tady.

Vkládám pomocí Dibi, parsuju pomocí Texy, kód vypadá nějak takto

<?php
$popis = stripslashes($values['popis']);
$clanek = stripslashes($values['clanek']);
$texy = new AdminTexy();
$texy->addHandler('block', 'blockHandler');
$htmlPopis = $texy->process($popis);
$htmlClanek = $texy->process($clanek);

$this->db->query("INSERT INTO noviny_clanky(seonadpis,nadpis,popis,clanek,texypopis,texyclanek,autor,kategorie,datum, nepublikovat)
VALUES('$seonadpis','$nadpis','$htmlPopis',
'$htmlClanek','$popis','$clanek','$autor',
'$kategorie',now(),'$nepublikovat')");
?>

Jak říkám, na kód pouze s uvozokama to funguje jak má, ale na webu FSHL jsem viděl, že jde obarvovat i kód s apostrofy a tak mi není jasné co dělám špatně. Jak upravit SQL dotaz tak, aby neházel chybu na prvním apostrofu?


http://OpiciNoviny.cz – čtení nejen pro opice :P

 

#2 před 3 lety

vlki
Člen
Registrovaný: 30. 6. 2008
Příspěvky: 239

Re: Vkládání PHP kódu

Nechápu, proč před vložením do databáze používáš funkci stripslashes…?

Jinak je problém v tom, že vkládáš hodnoty do databáze přímo bez nějakého kontrolování vstupních dat. Tohle za tebe dibi dokáže řešit, ale musíš ji (ho?) nechat. Zkus tedy něco ve smyslu:

$record = array(
    'seonadpis' => $seonadpis, // použije se automaticky modifikátor %s pro řetězce
    'nadpis' => $nadpis,
    'popis' => $htmlPopis,
    'clanek' => $htmlClanek,
    'texypopis' => $popis,
    'texyclanek' => $clanek,
    'autor' => $autor,
    'kategorie' => $kategorie,
    'datum%sql' => 'NOW()', // explicitně nastavený modifikátor %sql pro volání procedury
    'nepublikovat' => $nepublikovat,
);
$this->db->query("INSERT INTO noviny_clanky", $record);

Nehledě na to, že je to mnohem přehlednější…

Edit: kravco: Jako vejce vejci ;)

Editoval vlki (18. 5. 2009 16:49)

 

#3 před 3 lety

kravco
Moderator
Registrovaný: 15. 6. 2008
Příspěvky: 791

Re: Vkládání PHP kódu

Ukážkový SQL Injection :)

V tomto ti pomôže samotné dibi, treba ale dopyt na databázu zostavovať správne:

// sanitizácia & úpravy ako predtým...

$sqlValues = array(
    'seonadpis' => $seonadpis,
    'nadpis' => $nadpis,
    'popis' => $htmlPopis,
    'clanek' => $htmlClanek,
    'texypopis' => $popis,
    'texyclanek' => $clanek,
    'autor' => $autor,
    'kategorie' => $kategorie,
    'datum%sql' => 'NOW()', // „%sql“ označuje, že tento parameter je čisté SQL
    'nepublikovat' => $nepublikovat,
);

$this->db->query('INSERT INTO novinky_clanky %v', $sqlValues);

Edit: pekná zhoda :)

Editoval kravco (18. 5. 2009 16:48)

 

#4 před 3 lety

Kenn
Člen
Registrovaný: 27. 1. 2009
Příspěvky: 130

Re: Vkládání PHP kódu

Díky moc

vlki napsal(a):
Nechápu, proč před vložením do databáze používáš funkci stripslashes…?

Bylo to v příkladu Texyly. Navíc se mi zdá lepší stripovat to před vkládáním než při každém výpisu.


http://OpiciNoviny.cz – čtení nejen pro opice :P

 

#5 před 3 lety

Tomik
Nette Evangelist
Registrovaný: 20. 3. 2005
Příspěvky: 566

Re: Vkládání PHP kódu

Kenn napsal(a):

Bylo to v příkladu Texyly. Navíc se mi zdá lepší stripovat to před vkládáním než při každém výpisu.

Do databáze se to ale slashované neuloží. Tedy pokud se to někde neslashuje dvakrát. Není tedy potom po vyzvednutí z DB potřeba nic stripovat (OT: pod tímto slovesem se mi evokuje úplně jiná činnost než odstraňování zpětných lomítek :D)

 

#6 před 3 lety

Kenn
Člen
Registrovaný: 27. 1. 2009
Příspěvky: 130

Re: Vkládání PHP kódu

bez stripslashes zůstávají po výpisu \n znaky, takže těžko říct


http://OpiciNoviny.cz – čtení nejen pro opice :P

 

#7 před 3 lety

Tomik
Nette Evangelist
Registrovaný: 20. 3. 2005
Příspěvky: 566

Re: Vkládání PHP kódu

Kenn napsal(a):

bez stripslashes zůstávají po výpisu \n znaky, takže těžko říct

Co znamená, že zůstávají \n znaky? To jako že se vypíše ten znak (tedy odřádkování)? Pak je to ale podle mě naprosto v pořádku. Pokud se vypíší vždy dva znaky \ a n za sebou, pak dochází k tomu (pravděpodobně), že jsou do dat dvakrát přidány zpětná lomítka.

 

#8 před 3 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5548

Re: Vkládání PHP kódu

Data vrácená z databáze se nijak neupravují. Navíc metody addslashes nebo stripslashes nemají takřka žádný smysluplný význam. Viz Escapování – definitivní příručka.

 

Zápatí