Autor | Zpráva | ||
---|---|---|---|
Donekulda Profil |
#1 · Zasláno: 8. 10. 2014, 18:15:20
Dobrý den chtěl bych se zeptat jak bych mohl zabezpečit chat na mém webu? protože když jsem dnes tohle ukázal par lidem tak jeden z nich my tam dal to chatu script ,který mě to shodil. Prostě se chci zeptat jak to mohu zabezpečit proti scriptům. zde je index na chat mohli by jste poradit ?
<?php include "../header.php"; include "./zapis.php"; $akce = isset($_GET["akce"]); $id_prispevku = @$_GET["id"]; if(isset($akce)=="smazat" AND isset($id_prispevku)){ $uprava = mysql_query("UPDATE chat SET smazano='1' WHERE id='".mysql_real_escape_string($id_prispevku)."' ;"); } ?> <div class="chat_box"> <div class="zpravy" id="vypis"> <?php include "./vypis.php" ?> </div> <div class="formular"> <form action="<?php $PHP_SELF; ?>" method="POST" name="form" id="form"> <div class="input_text"> <input type="text" name="text" size="80%" /> </div> <div class="smajlici"> <span onclick="smajlik(':D')"><img src="../theme/smajlici/mega_smich.gif" /></span> <span onclick="smajlik(':)')"><img src="../theme/smajlici/smich.gif" /></span> <span onclick="smajlik(':(')"><img src="../theme/smajlici/zamraceny.gif" /></span> <span onclick="smajlik(':/')"><img src="../theme/smajlici/urazeny.gif" /></span> </div> <div class="odeslat"> <input type="submit" name="poslat" value="Odeslat" /> </div> </form> </div> </div> <?php include "../footer.php"; ?> |
||
xROAL Profil |
#2 · Zasláno: 8. 10. 2014, 18:23:17
Síce tam nikde nevidím, ako sa správa od užívateľa ukladá do databáze (to je predpokladám v súbore "zapis.php"), ale myslím, že ti bude stačiť funkcia
htmlspecialchars() pri výpise, ktorá zabezpečí že ak tam človek aj nejaký script vloží, tak sa nepustí, ale vypíše sa ako obyčajný text.
|
||
Donekulda Profil |
xROAL:
jo dík ale kam ? Typuji dobře ,když to dám do php ? |
||
Kubo2 Profil |
Donekulda:
Áno. Viď dokumentáciu. Ale ak ti máme nabudúce poradiť o niečo konkrétnejšie, než len slepo triafať, prosím prilož celý kód, ktorého sa problém týka - v tomto prípade by namiesto stávajúceho kódu stačilo ukázať nám súbory zapis.php a vypis.php .
|
||
Donekulda Profil |
#5 · Zasláno: 8. 10. 2014, 19:52:13
Kubo2:
tak jo zde jsou ty kody vypis.php <?php if(isset($kontrola) == "0"){ session_start(); } include($_SERVER['DOCUMENT_ROOT']."/config.php"); $i=1; $dotaz=mysql_query("SELECT * FROM chat WHERE smazano='0' ORDER BY `chat`.`id` DESC LIMIT 0, 10 ;"); while($zaznam = MySQL_Fetch_Array($dotaz)): $id_chat = $zaznam["id"]; $nick_chat = $zaznam["nick"]; $id_nicku_chat= $zaznam["id_nicku"]; $datum_chat = $zaznam["datum"]; $text_chat = $zaznam["text"]; $ip_chat = $zaznam["ip"]; $i++; if($i % 2){ $trida = "lichy"; } else { $trida = "sudy"; } $dotaz2 = mysql_query("SELECT id, avatar FROM uzivatele WHERE id='$id_nicku_chat' ;"); while($vystup2 = mysql_fetch_object($dotaz2)) { $avatar_chat = $vystup2->avatar; } if(@$avatar_chat == 1){ $avatar_obr = "<img src='../avatary/$nick_chat.gif' height='30px' alt='Avatar' >"; } else { $avatar_obr = "<img src='../avatary/bez_avataru.png' height='30px' alt='Avatar' >"; } ?> <div class="<?php echo $trida; ?>"> <div class="zprava"> <div class="avatar"> <?php echo $avatar_obr; ?> </div> <div class="levy_sloupec"> <div class="nick"> <span onclick="nick('<?php echo $nick_chat; ?>')" ondblclick="presmerovani(<?php echo $id_nicku_chat; ?>);"><?php echo $nick_chat; ?></span> </div> <div class="cas"> <?php echo $datum_chat; ?> </div> </div> <div class="stredni_sloupec"> <div class="text"> <?php echo $text_chat; ?> </div> </div> <?php if(isset($_SESSION["opravneni"]) == "3"){ ?> <div class="pravy_sloupec"> <div class="ip"> <?php echo $ip_chat; ?> </div> <div class="smazat"> <input type="submit" name="smazat" onclick="window.location.href='./index.php?akce=smazat&id=<?php echo $id_chat; ?>';" value="Smazat" /> </div> </div> <?php } ?> </div> </div> <?php endwhile; $kontrola = "0"; ?> <?php if(isset($_SESSION["nick"])){ if(isset($_POST["poslat"])){ if(isset($_POST["text"])){ $smajlici = array( ':D' => '<img src="../theme/smajlici/mega_smich.gif">', ':)' => '<img src="../theme/smajlici/smich.gif">', ':(' => '<img src="../theme/smajlici/zamraceny.gif">', ':/' => '<img src="../theme/smajlici/urazeny.gif">' ); function textove_na_graficke($text){ global $smajlici; foreach($smajlici as $textovy => $graficky) { $text = str_replace($textovy, $graficky, $text); } return $text; } $nick = $_SESSION["nick"]; $id = $_SESSION["id"]; $datum = date("H:i d. m. Y"); $ip = $_SERVER["REMOTE_ADDR"]; $text = textove_na_graficke($_POST["text"]); $zapis = mysql_query("INSERT INTO chat SET nick='$nick', id_nicku='$id', datum='$datum', text='$text', ip='$ip', smazano='0' ;"); } } } else { echo "Přihlaš se!"; } ?> <?php include "../header.php"; include "./zapis.php"; $akce = isset($_GET["akce"]); $id_prispevku = @$_GET["id"]; if(isset($akce)=="smazat" AND isset($id_prispevku)){ $uprava = mysql_query("UPDATE chat SET smazano='1' WHERE id='".mysql_real_escape_string($id_prispevku)."' ;"); } ?> <div class="chat_box"> <div class="zpravy" id="vypis"> <?php include "./vypis.php" ?> </div> <div class="formular"> <form action="<?php $PHP_SELF; ?>" method="POST" name="form" id="form"> <div class="input_text"> <input type="text" name="text" size="80%" /> </div> <div class="smajlici"> <span onclick="smajlik(':D')"><img src="../theme/smajlici/mega_smich.gif" /></span> <span onclick="smajlik(':)')"><img src="../theme/smajlici/smich.gif" /></span> <span onclick="smajlik(':(')"><img src="../theme/smajlici/zamraceny.gif" /></span> <span onclick="smajlik(':/')"><img src="../theme/smajlici/urazeny.gif" /></span> </div> <div class="odeslat"> <input type="submit" name="poslat" value="Odeslat" /> </div> </form> </div> </div> <?php include "../footer.php"; ?> |
||
Joker Profil |
Donekulda:
Ten kód obsahuje úctyhodné množství chyb. Když rozeberu kód v [#1]: Na řádku 4 isset vrací boolean, takže hodnota $akce bude true nebo false. Řádek 5 bude bez nastaveného $_GET["id"] generovat notice pohlcenou zavináčem a v $id_prispevku bude buď $_GET["id"], nebo prázdný řetězec. Nastupuje řádek 6: if(isset($akce)=="smazat" AND isset($id_prispevku)){ Čili když někdo ten skript zavolá s ?id=něco, smaže to příspěvek s tím id, v ostatních případech se to jen pokusí smazat příspěvky s prázdným id. |
||
Donekulda Profil |
#7 · Zasláno: 8. 10. 2014, 20:26:36
Aha tak dík ,ale pořád mám otázku jak to zabezpečit ?
|
||
Časová prodleva: 10 let
|
0