Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: zonebook - vieraskirja

d-hunter [19.06.2005 12:54:52]

#

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;
?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta