Eli tämmöistä olen iltaisin koodaillut.
Lähinnä tarkoitus oli opetella PHP:n alkeita, mutta kun kerta toimiva kirja syntyi, ajattelin laittaa sen tänne.
Uskon, että koodi on tasoltaan todella heikkoa. Jokaista asiaa en jaksanut kommentoida. Admin-paneeli on todella yksinkertainen, sillä parempaa ei tuntunut syntyvän :(.
Kiitokset sivutuksesta Laaksosen Antille.
Antakaa kritiikkiä, niin voin koittaa parannella tätä.
Vielä: Admin-paneelin turvallisuus jotenkin arveluttaa (admin.php).
Jos mahdollista, kertokaahan mitä tietoturva-aukkoja siitä löytyy.
Edit: Demoa löytyy osoitteesta
http://koti.mbnet.fi/d-hunter/bookki/
index.php
<?php ////////////////////////////////////////// //////////// ZONE_BOOK ////////////////// ///////////////////////////////////////// //Koodi: d-hunter ///Sivutus: Antti L. // ///////////////////////////////////////// //Asennus/////////////////////////////// //1. Tee kirjalle uusi kansio (palvelimellesi), vaikkapa /kirja/ //2. Muokkaa config.php:tä haluamallasi tavalla. Salasanan TÄYTYY olla MD5-kryptattu! //3. Luo tiedostot "viestit.dat" ja "floodblock.txt" //4. Siirrä tiedostot luomaasi kansioon //5. Chmodaa "viestit.dat" ja "floodblock.txt" -tiedostot 664 //////////////////////////////////////// //Ominaisuudet: //Kirjoittaminen :D //Sivutus (kiitokset Antti Laaksoselle) //Ei ylipitkiä tai liian lyhyitä viestejä //Pätkii ylipitkät sanat viestistä //Kirjaa lähettäjän IP-osoitteen //Adminpaneeli //Floodauksen esto //////////////////////////////////////// ?> <?php include("config.php") ?> <?php echo $otsikko; ?> <br> <?php if($run == "yes"){ $ip = getenv("REMOTE_ADDR"); //ip $block_tiedosto = fopen("floodblock.txt", "r"); //floodblock $ip2 = trim(fgets($block_tiedosto)); //floodblock fclose($block_tiedosto); //floodblock $nimi = $_POST['nimi']; //kentät muuttujiksi $vastaus = $_POST['vastaus']; //kentät muuttujiksi $email = $_POST['email']; //kentät muuttujiksi $viesti = $_POST['viesti']; //kentät muuttujiksi $www = $_POST['www']; //kentät muuttujiksi $www_nimi = $_POST['www_nimi']; //kentät muuttujiksi if ($ip == $ip2) die("Et voi lähettää kahta viestiä peräkkäin!"); //floodblock if(strlen($viesti) > 300) die("Vähän rajaa viestin pituudelle!"); //siistimist if(strlen($viesti) < 5) die("Kirjoita edes jotain!"); //siistimist if(strlen($nimi) < 3) die("Nimi olisi hyvä idea"); //siistimist if(strlen($nimi) > 11) die("Lyhennä kotisivusi nimeä ihmeessä!"); //siistimist if(strlen($nimi) > 30) die("Älä nyt kaikkien sukulaistesi nimiä jaksa kirjoittaa"); //siistimist $viesti = stripslashes($viesti); //siistimist $viesti = str_replace("||", " ", $viesti); //siistimist $nimi = str_replace("||", " ", $nimi); //siistimist $www_nimi = str_replace("||", " ", $www_nimi); //siistimist $www = str_replace("||", " ", $www); //siistimist $email = str_replace("||", " ", $email); //siistimist $nimi = htmlspecialchars($nimi); //siistimist $email = htmlspecialchars($email); //siistimist $www = htmlspecialchars($www); //siistimist $viesti = htmlspecialchars($viesti); //siistimist $viesti = wordwrap($viesti, 30, " ", 1); //ei ylipitkiä sanoja $viesti = str_replace(array("\r\n","\r","\n"),"<br />",$viesti); //rivinvaihdot.. $aika = time(); $rivi = "$nimi|$email|$aika|$viesti|$www|$www_nimi|$vastaus|$ip\n"; //kirjoitetaan tiedostoon $tiedosto = fopen("viestit.dat", "a"); fwrite($tiedosto, $rivi); fclose($tiedosto); $block_tiedosto = fopen("floodblock.txt", "w"); //floodblock fwrite($block_tiedosto, $ip); //floodblock fclose($block_tiedosto); //floodblock header("location: index.php"); } ?> <?php $viestit = array_reverse(file("viestit.dat")); $maara = count($viestit); $vps = $viestiapersivu; if (isset($_GET['pg'])) { $sivu = $_GET['pg']; } $pg = intval($pg); $maara = count($viestit); if ($maara > $vps) { echo "<p>"; for ($i = 0; $i < $maara / $vps; $i++) { if ($i <> 0) { echo " | "; } if ($sivu == $i) { echo "<b>".($i + 1)."</b>"; } else { echo "<a href=\"{$_SERVER['PHP_SELF']}?pg={$i}\">".($i + 1)."</a>"; } } echo "</p>"; } echo "<p>Vieraskirjassa on yhteensä $maara viestiä.</p><hr><table width=\"100%\" height=\"71\" border=\"0\">"; for ($i = $sivu * $vps; $i < $sivu * $vps + $vps; $i++) { if ($i < $maara) { $tiedot = explode("|", $viestit[$i], 8); $nimi = $tiedot[0]; $email = $tiedot[1]; $aika = $tiedot[2]; $viesti = $tiedot[3]; $www = $tiedot[4]; $www_nimi = $tiedot[5]; $vastaus = $tiedot[6]; $ip = $tiedot[7]; echo "<tr> <td width=\"47%\" bgcolor=\"#3399FF\"><b>Lähettäjä</b>: <a href=\"mailto:$email\">$nimi</a><br> <b>WWW</b>: <a href=\"$www\">$www_nimi</a></td> <td width=\"53%\" bgcolor=\"#3399FF\"><div align=\"right\">" . date("d.m.Y H:i", $aika) . "<br> </div></td> </tr> <tr bgcolor=\"#6699FF\"> <td colspan=\"2\">$viesti</td> </tr> <tr bgcolor=\"#3399FF\"> <td colspan=\"2\"><i>$vastaus</i></td> </tr><tr><td colspan=\"2\"></td></tr>"; } } ?> </table> <TABLE> <TR> <TD><FORM action="?run=yes" method="post"> Nimi:<br> <INPUT TYPE="text" NAME="nimi"><br> Sähköpostiosoite:<br> <INPUT TYPE="text" NAME="email"><br> Kotisivut:<br> <INPUT TYPE="text" NAME="www" value="http://"><br> Kotisivujesi nimi:<br> <INPUT TYPE="text" NAME="www_nimi" value=""><br> Viesti:<br> <TEXTAREA ROWS="5" NAME="viesti"></TEXTAREA><br> <input type="hidden" name="vastaus" value="Vastaus:"> <INPUT TYPE="submit" NAME="laheta" VALUE="Lähetä"> </FORM></TD> </TR> </TABLE> <hr> <font size="2"><a href="admin.php">Admin</a><br> zoneGB by <a href="http://d-hunter.se8.org">d-hunter</a>
config.php
<?php $salasana = "e7e941b1f09f266540c6780db51d5f58"; //MD5-kryptattu salasanasi. (oletuksena "salasana") $otsikko = "<h2>zoneGB</h2>"; //Tämä otsikko näkyy sivun yläreunassa. $viestiapersivu = "5"; //montako viestiä per sivu ?>
admin.php
<?php include("config.php") ?> <?php ob_start(); session_start(); if($kirjaudu == "ulos"){ session_start(); session_unregister("passu"); session_unregister("iposo"); header("location: ".$etusivu.""); } if($kirjaudu == "sisaan"){ session_register("passu"); $_SESSION['passu'] = $_POST['passu']; session_register("iposo"); $_SESSION['iposo'] = $_SERVER['REMOTE_ADDR']; header("location: $PHP_SELF"); } if (md5($_SESSION['passu']) === $salasana){?> <?php if($_POST['tallenna']){ $kirjoitettava = stripslashes($_POST['data']); $$kirjoitettava = str_replace("<br>", "\n", $$kirjoitettava); $tt = fopen("viestit.dat", "w"); fwrite($tt, "$kirjoitettava"); header("location: admin.php"); } ?> <b><center>zoneGB - Adminpaneeli</center></b><br> <?php $filu="viestit.dat"; $filu = str_replace("\n", "<br>", $filu); echo "<form action=' $PHP_SELF ' method='post'>"; echo "<textarea name='data' COLS='100' ROWS='20'>"; include($filu); // tekstikenttään tiedoston sisältö echo "</textarea><br>"; echo "<input type='submit' name='tallenna' value='tallenna'>"; ?> <br> <a href="?kirjaudu=ulos">Kirjaudu Ulos</a> <?php } else { echo(' <form method="post" action="?kirjaudu=sisaan"> <b>Salasana</b><br> <input type="password" name="passu"><br> <input type="submit" value="Kirjaudu"> </form> '); if(isset($_SESSION['passu'])){ if($pass != $salasana){ echo('<br>Salasana ei kelpaa!!<br>');} } } ob_end_flush(); exit; ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.