SQL dotaz

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Schmutzky
nováček
Příspěvky: 42
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline

SQL dotaz

Příspěvekod Schmutzky » 03 bře 2012 10:01

Zdravím,

mám takový řekl bych až velmi noobský dotaz snad mě tu za něj nesežerete :-D

Chci naplnit tabulky a vložit nějaké hodnoty, ale přeji si, abych si mohl selectem(formulářem v prohlížeči) vybrat jakou tabulku a právě to mi dělá problém.

Zajímavé je že po vypsání echo $_POST["sporty"] po odeslání vždy vypíše správně ovšem data nenaplní. Syntaktická chyba tam není jinak tabulky fungujou když to zkouším naplňovat i tak či tak žádnej problém s připojením k db taky problém nehledejte. Jinak ty tabulky se opravdu jmenují tak jako mám name v optionech.

Myslím že kód více osvětlí mou demenci :-D

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Sport:<br />
<select name="sporty">
<option>Vyberte sport...</option>
<option value="fotbal">Fotbal</option>
<option value="hokej">Hokej</option>
<option value="tenis">Tenis</option>
<option value="basket">Basketbal</option>
</select><br />
Domácí: <input type="text" name="domaci" size="20"><br />
Hosté: <input type="text" name="hoste" size="20"><br />
<input type="submit" value="Odeslat"><br /><br />

<?php
require "pripojeni.php";
if(!empty($_POST))
{
$sql = "INSERT INTO '".$_POST["sporty"]."'(domaci,hoste) VALUES('".$_POST["domaci"]."' , '".$_POST["hoste"]."')";
mysql_query($sql);
}
?>
</form>

Zkoušel jsem všechno možné a pořád nic :( Snad mi tu někdo poradí.

Reklama
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: SQL dotaz

Příspěvekod CZechBoY » 03 bře 2012 10:38

existují tabulky Fotbal,Hokej,Tenis,Basketbal?
za mysql_query dej var_dump(MySQL_Error());, to ti vypíše chybu z MySQL pokud nějaká bude

jinak tam žádnou chybu (až na bezpečnostní) nevidim

jo už vidim :D
máš tam apostrofy u názvu tabulky, musí tam být ` nebo žádné v případě bezkonfliktního názvu
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Schmutzky
nováček
Příspěvky: 42
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline

Re: SQL dotaz

Příspěvekod Schmutzky » 03 bře 2012 10:48

Děkuju moc fakt že tam byla syntaktická hrubka :-D u toho $_POST["sporty"] jsem měl zbytečně 2x ' ' přesně jak říkáš :) - už to zapisuje ty hodnoty. Ježiši já jsem ale mimoň :-D Ještě jednou díky a docela useful command ten dump jsem celkem začátečník tak se nezlobte :( :-D Jinak k té bezpečnosti co tím myslíš? Login mám zašifrovanej přes SHA1 a na každé stránce např i u přidávání těch zápasů mám vždycky kontrolu session proměnné jestli jsem přihlášený. Jinak velmi rád si poslechnu nějakou tu radu. :))

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: SQL dotaz

Příspěvekod CZechBoY » 03 bře 2012 11:01

myslím SQL injection, dál jsem se radši nerozepisoval, pač nevim kde ten formulář je používanej a kdo do něj může přidávat
pak samozřejmě CSRF - dát ke každému formuláři kontrolní token, ale víc na netu ;)

SQL injection se zbavíš funkcí MySQL_Real_Escape_String (musíš být připojený k databázi)
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Schmutzky
nováček
Příspěvky: 42
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline

Re: SQL dotaz

Příspěvekod Schmutzky » 03 bře 2012 11:04

Okay díky moc, jj to už si vyhledám. Tak ještě jednou díky za pomoc :-) Moc jsi mi pomohl :-)

ecaha
nováček
Příspěvky: 7
Registrován: březen 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: SQL dotaz

Příspěvekod ecaha » 03 bře 2012 12:20

Mám možná jen drobné doplnění/dotaz. Žiji v přesvědčení, že výše uvedený problém se:
a) řeší pomocí dvou tabulek - v jedné jsou uvedeny sporty, ve druhé výsledky a přes cizí klíč jsou spojeny
b) data vkládáme pomocí uložené procedury

Vyřeší se tím jak SQL injection, tak možnost, že nějaký sport přibude.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: SQL dotaz

Příspěvekod CZechBoY » 05 bře 2012 15:11

ecaha: eh? jak můžeš vyřešit SQL injection pomocí dvou tabulek/procedury?
to jako že budeš odhadovat co bude uživatel vkládat?
radši si přečti co to vůbec je, prtže asi nevíš o čem píšeš
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

ecaha
nováček
Příspěvky: 7
Registrován: březen 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: SQL dotaz

Příspěvekod ecaha » 05 bře 2012 17:32

Asi jsem se nevyjádřil dost jasně:
a) řeší chybný návrh databáze, tj. kdy pro stejnou věc o stejné struktuře použiji jinak pojmenované tabulky a rozšíření o další sport znamená zásah do databáze, což je nesmysl
b) vkládání dat pomocí parametrizované uložené procedury místo dynamického SQL patří k jedné za základních defenzivních technik (a vůbec technik jak dělit DB logiku od vyšší vrstvy) a v tomlhe případě by design řeší problematiku SQL injection ani se nemusím moc starat o obor hodnot (tady pravda hádám, že výsledky jsou int a programátor tuší, že pro ukládání čísel se používá číselný datový typ a i parametry jsou deklarovány jako int)

Pravda nebyl jsem dostatečně expresivní ve výrazivu. Čili ještě jednou znovu. Celý návrh DB je nesmysl, stejně tak použití dynamického SQL. DB pro tento problém má dvě tabulky. Jedna pro sporty, druhá pro výsledky. Sporty do ovládacího prvku doluji procedurou DejSporty(). Vysledky ukladam parametrizovanou procedurou UlozVysledek(sport int, domaci int, hoste int), nemám problém se SQL injection a do jisté míry ani se změnou schématu DB. Funkčnost v prvním postu uvedenou dodržím.

V případě, že domácí a hosté jsou názvy teamů, tak se opět jedná o zcela zmrvený návrh DB.

Nekladu si patent na rozum, ale přece jen jsem nějakou aplikaci sem tam viděl.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: SQL dotaz

Příspěvekod CZechBoY » 05 bře 2012 18:07

SQL injection nezabráníš nějakou procedurou, ale escapováním.. to pořád nechápeš?
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

ecaha
nováček
Příspěvky: 7
Registrován: březen 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: SQL dotaz

Příspěvekod ecaha » 05 bře 2012 19:13

Návrh aplikace dokáže zajistit bezpečnost před SQL injection a nemusím escapovat, pořád to nechápeš? Nepoužití dynamického sql je první krok, použití procedury která sletí na invalid parse exception když na vstupu bude cokoliv jiného než celé číslo je krok druhý. Je to odolné proti SQL injection a nemusím escapovat.

Netvrdím, že escapovat se nemá, ale neí to jediné, samospasitelné božstvo. Co jsem chtěl předvést je, že bezpečnost aplikace začíná jejím návrhem. IMO je prostě chyba nezamýšlet se nad tím, jak tu aplikaci udělat lépe, ale spokojit se s tím - escapuju, tak jsem v suchu a bezpečí ať je to bastl jakýkoliv.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: SQL dotaz

Příspěvekod CZechBoY » 06 bře 2012 19:56

když můžeš změnit tvar SQL tak je to SQL injection, proto jsem psal, že si máš přečíst co to vůbec je
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

ecaha
nováček
Příspěvky: 7
Registrován: březen 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: SQL dotaz

Příspěvekod ecaha » 06 bře 2012 21:03

Výborně už se blížíme k cíli. Píšeš:
"když můžeš změnit tvar SQL tak je to SQL injection, proto jsem psal, že si máš přečíst co to vůbec je"

No a to v mém návrhu nemůžeš, nijak. Safe by design.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Dotaz- bottleneck
    od vasson » 24 pro 2024 22:22 » v Rady s výběrem hw a sestavením PC
    2
    2233
    od Cleric Zobrazit poslední příspěvek
    25 pro 2024 11:47
  • Dotaz na výběr SSD disku
    od Jirka88 » 10 zář 2024 17:52 » v Rady s výběrem hw a sestavením PC
    3
    1931
    od Jirka88 Zobrazit poslední příspěvek
    12 zář 2024 19:44

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů