none
jak na dotaz s '--'

    Obecná diskuse

  • Dobrý den,

    mám takový  drobný zádrhel:

    select *
    from tabulka
    where sloupec='--'

    Když dotaz spustím v lokální síti, proběhne korektně, problém je pokud je to dotaz z Internetu, ten prostě neproběhne. Vím, že zádrhel je v tom '--' (2x mínus), protože pokud tam dám jiný znak, třeba rovná se, tak to projde. Jak to upravit tak, abych tam ty mínusy mohl nechat? quotename, ani závorky k požadovanému cíli nevedli. A ty dva mínusy mi tam značí, že je dotyčný bez kvalifikace, takže třeba rovná se by tam vypadalo blbě
    Dík

    Petr

    úterý 20. listopadu 2012 6:03

Všechny reakce

  • Dobry den,

    zkuste tam misto te quotace dat \'--


    úterý 20. listopadu 2012 6:33
  • Bohužel,

    nevede to k cíli. Navíc '\' provádí konverzi na money. Takže i kdyby to fungovalo, místo mínus, tam budu mít 0.

    \'-' vrací 0 (respektive 0.00), ale \'--' nevrací nic, vzniká chyba. Navíc je to v podmínce.

    Petr

    úterý 20. listopadu 2012 7:23
  • no a kdyz tam date \-\- (where sloupec=\-\-)

    proste pred kazdym specialnim znakem by mel byt backslash

    zkuste to bez quotace i s ni

    úterý 20. listopadu 2012 7:47
  • Bohužel,

    nic kromě chyby.

    Petr

    úterý 20. listopadu 2012 7:57
  • zkuste jeste minus nahradit &#150 nebo SELECT char(150)

    pokud ani to nepomuze, zkusme na to jit od lesa...

    jaky je to sql server?

    co to hodi za chybu?

    jak a pres co to spoustite?

    jinak minus je normalni znak v tom by problem byt nemel....nebo ho zkuste nahradit prikazem...zkratka to nejako obejit, aby to tam nebylo SELECT REPLACE('Auto', '-', '=')

    edit: dve -- jsou char(151)
    úterý 20. listopadu 2012 8:50
  • Tak úspěch se dostavil.

    where kvalif=CHAR(45)+CHAR(45)

    To je to, co vedlo k úspěchu.

    • Char(150) není "mínus", ale je to tomu velmi podobné. :-)
    • Pokud tam dám to "150" sice dotaz projde, ale nevrátí žádný výsledek, protože mínus je "45"
    • Mínus je sice "normální" znak, ale 2 mínus za sebou jsou komentář, a to je zapovězeno, protože ochrana před SQL injection.
    • Proto to asi funguje z lokální sítě, ale ne z Internetu, i když to trochu nechápu, protože i z lokální sítě lze podniknout útok.
    • MS SQL 2008 R2 Enterprise

    úterý 20. listopadu 2012 9:27
  • no ja to lovil z hlavy, ale zkuste jeste to char(151) ;)
    úterý 20. listopadu 2012 9:32
  • To je totéž, select ascii(-) vráti 40 a funguje to.

    Díky moc, jen by mě zajímalo jak je to s tím SQL injection. Pokud to někdo ví, budu rád, pokud mi to objasní. Základy útoku chápu, proč to stejně nefunguje z lokální sítě ne.

    Petr

    úterý 20. listopadu 2012 9:37
  • http://cs.wikipedia.org/wiki/SQL_injection

    rekl bych, ze je to celkem pekne a strucne popsano...nicmene, pokud zajdete na stranky WUGu, jsou tam videa s prednaskami a nekdo se tam o tom zminoval (mam pocit, ze to byla nejaka prednaska o bezpecnosti domeny od Ondry Sevecka, ale jisty si tim uplne nejsem).


    středa 21. listopadu 2012 8:42