Autor | Zpráva | ||
---|---|---|---|
Hacker Profil * |
$query = MySQL_Query("SELECT * FROM `users` WHERE `user` = '$user' and `password` = '$password'") or die (mysql_error());
mam kod a neviem ako ho mam ochranit aby nemohol uzivatel zadavat znaky ' ,# , OR , AND |
||
nightfish Profil |
#2 · Zasláno: 12. 5. 2008, 23:10:40 · Upravil/a: nightfish
mysql_real_escape_string ti pomůže (minimálně s apostrofem)
zadání AND, OR nebo # v SQL dotazu je neškodné EDIT: (označen kurzívou) |
||
Mike8748 Profil |
#3 · Zasláno: 12. 5. 2008, 23:10:48
pomoci str_replace dany texty nahradit v promenych $user a $password za prazdnej znak, pak teprve to pouzit v query
|
||
HACKER Profil * |
#4 · Zasláno: 12. 5. 2008, 23:30:38
a co je z obou lepsi ???
|
||
Aleš Janda Profil |
#5 · Zasláno: 12. 5. 2008, 23:32:28
HACKER
Ten od nightfish. Já to dělám tak, že řetězce escapuju a k číslu přičítám nulu. |
||
HACKER Profil * |
#6 · Zasláno: 12. 5. 2008, 23:34:03
Aleš Janda
a nestaci to jenom escapovat |
||
Aleš Janda Profil |
#7 · Zasláno: 12. 5. 2008, 23:37:20
Pokud je dotaz typu
$dotaz = 'SELECT * FROM tabulka WHERE cislo = '.mysql_real_escape_string($_GET['cislo']); a do $_GET['cislo'] dám třeba 1 OR 1 = 1 hádej co ten dotaz udělá ;-) Leda že bys i čísla dával do uvozovek/apostrofů, ale to se mi nezdá jako dobrá konvence.. |
||
Timy Profil |
#8 · Zasláno: 12. 5. 2008, 23:39:21
Aleš Janda
…a k číslu přičítám nulu. Nestačí třeba intval()? |
||
Aleš Janda Profil |
#9 · Zasláno: 12. 5. 2008, 23:42:41
Timy
Stačí :-) Pokud se nejedná o FLOAT (což se většinou nejedná). Obojí je obrana proti SQL Injection. |
||
starenka Profil |
#10 · Zasláno: 12. 5. 2008, 23:56:45
a pro jistotu prehod poradi loginu a hesla :>
|
||
Aleš Janda Profil |
#11 · Zasláno: 12. 5. 2008, 23:57:54
starenka
proč? |
||
starenka Profil |
#12 · Zasláno: 13. 5. 2008, 00:01:42
nevim... to byl vtip ;) escapuj a nebudes mit problem...
jinak tohle je dobry pocteni... http://skola.security-portal.cz/%5BRubberDuck%5D-SQL_Injection.txt |
||
suky Profil |
#13 · Zasláno: 13. 5. 2008, 10:02:29
HACKER
Tady je tak dobry pocteni. (link) |
||
Joker Profil |
#14 · Zasláno: 13. 5. 2008, 11:17:41
Timy
Nestačí třeba intval()? Já si taky říkám, co je špatného na intval(), že se mu tady většina lidí vyhýbá :-) Jinak Hacker dost záleží na tom, co je obsahem těch proměnných $user a $password. Když bude třeba: $password = md5($_GET["password"]); tak přes tohle žádný nebezpečný znak neprojde. |
||
DoubleThink Profil * |
#15 · Zasláno: 13. 5. 2008, 12:41:26
Leda že bys i čísla dával do uvozovek/apostrofů, ale to se mi nezdá jako dobrá konvence..
Ale to je jediná správná konvence - i u číselných datových typů. |
||
Aleš Janda Profil |
#16 · Zasláno: 13. 5. 2008, 14:53:53
DoubleThink
Ale to je jediná správná konvence - i u číselných datových typů. Zdroj? Pokud si pamatuju, standard SQL číslo v uvozovkách nepřipouští, je to pouze benevolence MySQL. Takže při případném přechodu třeba na PostgreSQL vznikne problém. Navíc to není žádná vychytávka, která by něco usnadňovala, jen prostě jiná konvence, takže nevidím důvod, proč to tak používat. |
||
Mastodont Profil |
#17 · Zasláno: 13. 5. 2008, 15:07:00 · Upravil/a: Mastodont
DoubleThink
To tedy rozhodně není dobrý zvyk, viz Janda. |
||
DoubleThink Profil * |
#18 · Zasláno: 13. 5. 2008, 15:16:53 · Upravil/a: DoubleThink
Navíc to není žádná vychytávka, která by něco usnadňovala
Naopak. Je to legitimní, nezavržený způsob zápisu. Máš naprostou kontrolu nad hranicemi a tvarem vstupních dat. To že to není úplně košér je podle mě nerelevantní. To tedy rozhodně není dobrý zvyk A to v praxi protože ... ? |
||
Aleš Janda Profil |
#19 · Zasláno: 13. 5. 2008, 15:20:59
DoubleThink
V čem je teda ta výhoda? Čísla nemívají příliš dlouhý zápis, navíc je dávám zpravidla v úplně jiném kontextu. Skoro bych řekl, že (alespoň pro mě) je přehlednější tvar bez uvozovek, protože snadno rozeznám číslo od řetězce. Le to legitimní, nezavržený způsob zápisu. To, že něco není zavrženo, automaticky neznamená, že je to dobré ;-) |
||
suky Profil |
#20 · Zasláno: 13. 5. 2008, 15:26:27
Aleš Janda
Skoro bych řekl, že (alespoň pro mě) je přehlednější tvar bez uvozovek, protože snadno rozeznám číslo od řetězce. A jeste k tomu s tim PHP pracuje urcite jinak nez s retezcem, rychleji... |
||
HACKER Profil * |
#21 · Zasláno: 13. 5. 2008, 17:15:57
Joker
kdys ale nekdo zada usera admin'/* tak presto prejde kdys nekontroluje jestly zadal do password vubec nic |
||
Aleš Janda Profil |
#22 · Zasláno: 13. 5. 2008, 22:18:22
suky
A jeste k tomu s tim PHP pracuje urcite jinak nez s retezcem, rychleji... Tak to zas rozhodně ne, když porovnáváš číselný sloupec s řetězcem, převede optimalizátor řetězec, ne celý sloupec. Pak už se pracuje jenom s číslem (a optimaizátor tam je tak jako tak - a tohle je fakt triviální úkon). Takže myslím, že rychlost bude naprosto stejná. |
||
Časová prodleva: 16 let
|
0