Oznámení
Zjistil jsem moznost SQL injection v Dibi
před 9 lety
- tomas.krejci
- Člen | 5
Resil nekdo z vas uz tohle?
$var = ‚neco-co-obsahuje-*/-znaky‘;
dibi::fetch(‚
SELECT *
FROM tabulka
WHERE podminka1
%if‘, nesplnenapodminka, ‚AND sloupec = %s‘, $var, ‚%end
AND podminka2
‘);
Vysledek, ktery se posila do SQL, je tento query vcetne komentaru:
SELECT *
FROM tabulka
WHERE podminka1
/* AND … = ‚neco-co-obsahuje-*/-znaky‘ */
AND podminka2
coz se vyhodnoti jako syntax error.
Diky za Vase postrehy.
Editoval tomas.krejci (23. 1. 2011 12:39)
před 9 lety
- HosipLan
- Moderator | 4693
Jestli si dobře pamatuju, pokud se podmínka nesplní, dibi nepřekládá
obsah modifikátorů podmínky, ale místo nich doplní „...
“.
Řekl bych proto, že spíše vygeneruje něco jako
SELECT * FROM tabulka WHERE podminka1 /* AND sloupec = ... */ AND podminka2
Testoval jsi to vůbec?
PS: Příště používej zvýrazňování kódu, kdo se má v těch uvozovkách vyznat! (je to druhé tlačítko na tom panelu s nástroji na formátování textu příspěvku zprava"
Editoval HosipLan (23. 1. 2011 15:46)
před 9 lety
- tomas.krejci
- Člen | 5
Samozrejme jsem to testoval, jinak bych sem nepsal. Tri tecky tam dava podle me kdyz je podminka „zbytecne“ dlouha (do zdrojaku jsem nekoukal). Test vypise tohle (a fetch to same):
SELECT *
FROM tabulka
WHERE podminka1
/* AND sloupec = 'neco-co-obsahuje-*/-znaky' */
AND podminka2
před 9 lety
- HosipLan
- Moderator | 4693
Ok tak jsem to taky vyzkoušel a potvrzují.
Založil jsem issue https://github.com/…ues/issue/30
Editoval HosipLan (24. 1. 2011 8:39)
před 9 lety
- Milo
- Nette Core | 1119
Také ověřeno. Prozatimně jsem si fixnul jako:
/* DibiTranslator.php:183 */
public function formatValue($value, $modifier)
{
if ($value instanceof Traversable) {
$value = iterator_to_array($value);
}
/* hotfix begin */
if( $this->ifLevelStart > 0 )
{
return '...';
}
/* hotfix end */
if (is_array($value)) {
$vx = $kx = array();
......
Editoval Milo (24. 1. 2011 10:38)
před 9 lety
- David Grudl
- Nette Core | 6806
Díky za fix, komitnuto.