Autor | Zpráva | ||
---|---|---|---|
_fantomas Profil |
#1 · Zasláno: 4. 5. 2014, 20:04:13
Ahoj, na webe mám ShoutBox celkom obyčajný v PHP cez MySQL no mám problém s tím že uživatelia môžu do chatu dávať
HTML tagy vlastne všetko, môžu dokonca aj zmeniť velkost chatu napíšu si tam svoje divy a je to cele v háji. Proste potrebujem zakázať všetko čo by mohlo uškodiť alebo zmeniť chat, chcem len aby šlo klasické pisanie zakázať tagy. Hladal som po googlu no neuspešne viete mi niekto poradiť? |
||
juriad Profil |
#2 · Zasláno: 4. 5. 2014, 20:13:56
Při výpise použij funkci htmlspecialchars.
echo htmlspecialchars('<div onclick="alert(\'Baf!\');"></div>') |
||
Alphard Profil |
#3 · Zasláno: 4. 5. 2014, 20:15:15
Nebo ty tagy rovnou vyhazovat pomocí strip_tags(), pozor, jestli použijete druhý parametr a nějaké tagy povolíte, nebudou ošetřeny jejich parametry :-( Pak je lepší použít nějakou knihovnu jako Texy! nebo HTML Purifier. Ty jsou však poměrně složité, proto se to často řeší smazáním všech tagů a převodem povoleného white-listu (např. BB kódy) na html tagy.
|
||
_fantomas Profil |
#4 · Zasláno: 4. 5. 2014, 20:18:28
V PHP som aky taky začiatočník, to čo si napísal ty akože robí čo?
Tu mám ten skript a akosi neviem kam to mám hodiť a čo vlastne znamená alebo čo zablokuje to čo si napísal ty ?! <?php if($_SESSION['prihlaseny']){ ?> <? if($_SERVER['REQUEST_METHOD'] == "POST" && !empty($_POST['s-obsah'])){ $server = "*****"; $login = "*****"; $heslo = "*****"; $databaza = "*****"; $mysql = new mysqli("$server", "$login", "$heslo", "$databaza"); if ($mysqlXw->connect_errno) {echo"chyba pripojienia";} else{ header("Location: #"); $query = "INSERT INTO `shoutbox` (`autor` ,`text`) VALUES ('".$_SESSION['prihlaseny']."', '".$_POST['s-obsah']."');"; $res = mysqli_query($mysql, $query); $mysql->close();} } ?> <div class="nazov-widget"> <h3><i class="icon-comments-alt "></i> ShoutBox</h3> </div> <div class="widget"> <div class="shout-box-message-blok"> <?php $articles = mysql_query("SELECT * FROM shoutbox ORDER BY datum DESC LIMIT 30"); while($row = mysql_fetch_assoc($articles)){ ?> <div class="shout-box-message"> <p> <span style="font-size: 9px;"><?echo $row['id']?># </span><span style="color: #1991DB; font-weight: bold;"><?echo $row['autor']?> :</span> <?echo $row['text']?> </p> </div> <? } ?> </div> <form action="" method="POST"> <textarea style="height:60px; width:250px; margin-top: 10px;" placeholder="Text správy..." class="textbox" name="s-obsah"></textarea><br /> <input type="submit" class="default" style="padding: 0px; width:30%;" value="Odoslať"> </form> </div> <? } else { ?> <div class="nazov-widget"> <h3><i class="icon-comments-alt "></i> ShoutBox</h3> </div> <div class="widget"> <div class="shout-box-message-blok"> <?php $articles = mysql_query("SELECT * FROM shoutbox ORDER BY datum DESC LIMIT 30"); while($row = mysql_fetch_assoc($articles)){?> <div class="shout-box-message"> <p> <span style="font-size: 9px;"><?echo $row['id']?># </span><span style="color: #1991DB; font-weight: bold;"><?echo $row['autor']?> :</span> <?echo $row['text']?> </p> </div> <? } ?> </div> <p style="text-align: center;">Pre písanie do chatu sa musíš prihlásiť</p> </div> <? } ?> |
||
juriad Profil |
35. a 68. řádku změň na:
<?php echo funkce($row['text']); ?> To, kterou funkci (htmlspecialchars, strip_tags, něco svého) zvolíš je na tobě. |
||
_fantomas Profil |
Meno sa doplne samo s ktorým je prihlásený a u registračného formulara to mám ochránené tie < >
takže ak som správne pochopil má to byť napríklad takto? <?php echo strip_tags($row['text']); ?> |
||
juriad Profil |
#7 · Zasláno: 4. 5. 2014, 20:28:04
Ano. A kdyby sis to vyzkoušel, už bys to dávno zjistil :)
|
||
_fantomas Profil |
#8 · Zasláno: 4. 5. 2014, 20:32:50
Dík to by bolo vyriešené a čo PHP tagy?
Som napísal do Spravy echo "Ahoj"; a to sa mi síce v chatu nezobrazuje ukáže sa len NICK a ID spárva je prázdná ale v tabulke sa to zapisuje <?php echo "Ahoj"; ?> Je to v poriadku? nemôže to byť škodlivé? |
||
juriad Profil |
To je v pohodě. Strip_tags zahodí vše od počáteční závorky < až po koncovou >.
Pokud to necheš ani ukládat do databáze, tak uprav INSERT: $query = "INSERT INTO `shoutbox` (`autor` ,`text`) VALUES ('".$_SESSION['prihlaseny']."', '".strip_tags($_POST['s-obsah'])."');"; |
||
_fantomas Profil |
#10 · Zasláno: 4. 5. 2014, 20:37:26
V tom prípade problém vyriešený, Dík :)
|
||
Jan Tvrdík Profil |
Alphard:
Ach jo, proč mu prosím tě radíš strip_tags , která se pro to vůbec nehodí? Použití té funkce mu přidá víc problémů, než vyřeší.
juriad: „To, kterou funkci (htmlspecialchars, strip_tags, něco svého) zvolíš je na tobě.“ To není pravda, i když se rozhodne udělat chybu a použít strip_tags , tak musí stejně její výstup prohnat přes htmlspecialchars , neboť funkce strip_tags obecně nevrací validní HTML. Varianta „něco svého“ je ještě horší než strip_tags . To už si ho rovnou mohl střelit do nohy, ne?
|
||
Alphard Profil |
#12 · Zasláno: 5. 5. 2014, 08:33:39
Jan Tvrdík [#11]:
Protože informuji o dalších relevantních věcech, viz zbytek mého příspěvku. Chce se zbavit tagů, takže strip_tags() rozhodně relevantní je, některé problémy jsou zmíněny v komentářích v manuálu, který jsem mu odkázal, další může dohledat s tímto klíčovým slovem; a navíc nikde netvrdím, aby nepoužíval nic dalšího (htmlspecialchars() uvedl už juriad). Obecně lze říci, že podstatou vzdělání je informace sdílet, takhle již ví, jakým směrem se vydat, když bude chtít povolit tučné písmo. |
||
Jan Tvrdík Profil |
Alphard:
„Chce se zbavit tagů“ Nechce se zbavit tagů. On má problém s tím, že tam má XSS, a protože tomu nerozumí, tak se mylně domnívá, že se potřebuje zbavit tagů. Kromě toho ty tvrdíš „Nebo ty tagy rovnou vyhazovat“, čímž silně naznačuješ, že lze použít htmlspecialchars nebo strip_tags , což není pravda, neboť potřebuje vždy htmlspecialchars a pokud se dobrovolně rozhodne rozbíjet uživatelům příspěvky, smajlíky a podobné bizarní konstrukce, tak tam může přidat navíc strip_tags.
Pro ilustraci, co myslím tím rozbíjením příspěvků – pokud něco do chatu napíše "I <3 you, Daisy!" , tak po použití funkce strip_tags z té zprávy zbude jenom "I" .
|
||
_fantomas Profil |
#14 · Zasláno: 7. 5. 2014, 15:11:49
Takže čo mám použiť aby tam nefungovali tagy, aby nemohli ovplyvniť chat, nemohli meniť veľkosť pridávať tučné písma ..? :/
|
||
juriad Profil |
#15 · Zasláno: 7. 5. 2014, 15:20:12
Použij htmlspecialchars a dej vědět, jestli se to chová přesně, jak chceš. Pokud bys chtěl něco speciálního, tak se to musí udělat složitěji pomocí několika funkcí.
|
||
Časová prodleva: 10 let
|
0