[python] Fwd: pysql_premenna

Věroš Kaplan veros.kaplan na koren.cz
Úterý Červenec 22 13:55:41 CEST 2008


2008/7/22 Marek Mako <marekmako na gmail.com>:
> nasiel som nieco podobne ako si pisal, premyslal som nad tym. Vies mi aj
> povedat ake vyhody su v tvojom zapise? alebo je to standard? dakujem
>
> ---------- Forwarded message ----------
> From: Věroš Kaplan <veros.kaplan na koren.cz>
> Date: 2008/7/22
> Subject: Re: [python] pysql_premenna
> To: Konference PyCZ <python na py.cz>
>
>
> Chce se mi křičet. Takhle prosím NIKDY NE!
>
> Správně je takhle:
>
> ---
> p=raw_input("priezvisko: ")
> m=raw_input("meno: ")
> c=input("cislo: ")
>
> cur.execute("insert into zoznam (priezvisko, meno, telefon) values (?,
> ?, ?)", (p, m, c))
>
>
> --VK
>
> 2008/7/20 Petr Dlabal <dlabal na gmail.com>:
>> treba nejak jako
>> cur.execute("insert into zoznam (priezvisko, meno, telefon) values
>> ('%s', '%s', '%s')"%(p,m,c))
>>
>> PD
>> On Sat, Jul 19, 2008 at 11:25 PM, Marek Mako <marekmako na gmail.com> wrote:
>>> Zdravim
>>>
>>> Pomocou pysqlite vytvaram testovaciu db, hodim utrzok kodu:
>>> ....
>>>
>>> p=raw_input("priezvisko: ")
>>> m=raw_input("meno: ")
>>> c=input("cislo: ")
>>>
>>> cur.execute("insert into zoznam (priezvisko, meno, telefon) values (p, m,
>>> c)")
>>>
>>> con.commit()
>>> ....
>>>
>>> prosim vas ako dostamen nacitane hodnoty p, m, c zo vstupu uzivatela do
>>> values tabulky zoznam?
>>>
>>> toto je iba ukazkovy priklad :-)
>>>
>>>
>>>
>>>
>>> --
>>> Marek Mako
>>>
>>> Phone: 00421 948 020 529, O2 - SK
>>> VoIP: 00421 692 042 968, T-Com
>>>
>>> MSN: marekmako na gmail.com
>>> Jabber: 10om na jabber.com
>>> ICQ: 365 869 152
>>> _______________________________________________
>>> Python mailing list
>>> Python na py.cz
>>> http://www.py.cz/mailman/listinfo/python
>>>
>> _______________________________________________
>> Python mailing list
>> Python na py.cz
>> http://www.py.cz/mailman/listinfo/python
>>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
>
>
> --
> Marek Mako
>
> Phone: 00421 948 020 529, O2 - SK
> VoIP: 00421 692 042 968, T-Com
>
> MSN: marekmako na gmail.com
> Jabber: 10om na jabber.com
> ICQ: 365 869 152
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>

Ošetří se SQL injection. (  http://en.wikipedia.org/wiki/SQL_injection ).

--- Uvažujme kód ---
p=raw_input("priezvisko: ")
m=raw_input("meno: ")
c=input("cislo: ")

cur.execute("insert into zoznam (priezvisko, meno, telefon) values
(%s, %s, %s)" % (p, m, c))  #spatne#
cur.execute("insert into zoznam (priezvisko, meno, telefon) values (?,
?, ?)", (p, m, c)) #lepe#
---

Pokud do telefon nějaký vtipálek napíše: "222222222,33333333" program
na radku #spatne# spadne. Proc?

Ještě horší případ: do cislo napíše;"2); delete from zoznam where
(1=1";   Co se stane potom?

---

První varianta vyrobí řetězec, který pak pošle do databáze, druhá
varianta pošle do databáze příkaz a jeho parametry. Je potom starostí
DB modulu, aby data oescapoval tak, jak databáze očekává a excesům z
příkladů zabránil.

Čekám na dobrovolníká, ať to vysvětlí lépe, neb poslední dobou jsou
moje vysvětlovací buňky nějaké nemocné.

--VK


Další informace o konferenci Python