NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: JavaScript kód vložený do textarea

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
David
Člen
Avatar
David:12.3.2017 11:13

Zdravím,
opět si něco zkouším a ověřuju. Momentálně jsem si vytvořil jednoduchý formlulář obsahující pole textarea do kterého bych si rád zkusil vložit nějaký javascript kód (třeba přesměrování při kliknutí na obrázek), který se uloží do databáze a následně je uživateli vypsán. Něco jako diskuzní fórum. Chci si vyzkoušet XSS na svém vlastním webu. Proto to zkouším.

Když vložím skript do uvedeného pole např.

<SCRIPT LANGUAGE='JavaScript'>
                window.alert('Chcete-li pokračovat klikněte na OK')
                window.location.href='presmerovani.php';
 </SCRIPT>");

Tak se zobrazí hláška You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax.

Jak tedy správně postupovat ?
Díky

 
Odpovědět
12.3.2017 11:13
Avatar
Odpovídá na David
Neaktivní uživatel:12.3.2017 12:19

Chyba bude ve tvém skriptu, který ukládá data do databáze. Ukaž nám ho. ;)

Nahoru Odpovědět
12.3.2017 12:19
Neaktivní uživatelský účet
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:12.3.2017 12:31

I bez ukazky je celkem jasny, ze neosetrujes vlozeni retezce s uvozovkama

 
Nahoru Odpovědět
12.3.2017 12:31
Avatar
David
Člen
Avatar
David:13.3.2017 13:39
{
                       $title = $_POST["title"];
                       $content = $_POST["content"];


                       if ($title == "") {
                           echo "<script>location.href = 'PridatClanek.php#centerform';</script> Nebyl vyplněn nadpis!";
                           return;}
                       else if ($content == "") {
                           echo "<script>location.href = 'PridatClanek.php#centerform';</script> Nebyl vyplněn obsah!";
                           return;}
                       else {
                           $sql = mysqli_query($spojeni, "INSERT INTO clanek VALUES ('id','$title','$content')") or die (mysqli_error($spojeni));
                           echo "Článek byl úspěšně uložen";
                           exit();
                       }
                   }

Btw. kód je cíleně napsán,aby nebyl ošetřen proti injection apod. Když zadávam jakýkoliv řetezec do pole title a content,tak vše funguje. Jakmile chci vložít script,tak to nejde.

 
Nahoru Odpovědět
13.3.2017 13:39
Avatar
Odpovídá na David
Neaktivní uživatel:13.3.2017 14:26

Pročpak asi? Když zadáš text, který obsahuje jednoduchou uvozovku ' tak ti to naruší strukturu SQL příkazu. Řekněme, že obsah článku bude

text před ' text za

pak by se ti spustil takovýto SQL kód

INSERT INTO clanek VALUES (12,'Ukázka','text před ' text za')

Pokud se podíváš na uvozovky, tak ti to udělalo nepořádek, proto musíš použít mysqli_real_es­cape_string ( mysqli $link , string $escapestr ).

Nahoru Odpovědět
13.3.2017 14:26
Neaktivní uživatelský účet
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:13.3.2017 14:48

Problem je u

... '$content' ...

kde vznikne konflikt presne tady "... LANGUAGE='Java ... "

delas query value v jednoduchych uvozovkach, nikde neescapujes ty, co jsou v content a pak to samozrejme skonci chybou. To same udela urcite i retezec napr

Lorem 'ipsum' dolor

sorry za duplikat fredep - mel jsem moc dlouho otevrenou stranku bez refreshe :)

Editováno 13.3.2017 14:51
 
Nahoru Odpovědět
13.3.2017 14:48
Avatar
David
Člen
Avatar
David:13.3.2017 16:57

Díky za objasnění....to mi nějak nedošlo.

 
Nahoru Odpovědět
13.3.2017 16:57
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.