Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Pomoc z komentarzami
Forum PHP.pl > Forum > Przedszkole
Strarus
cześć:)
Chciałbym prosić o ocenę (także w komentarzach haha.gif ) mojego systemiku komentarzy smile.gif

http://www.comments.yoyo.pl/
wookieb
... Boże ratuj. Mamy oceniać "pustą" stronę? Może być sypnął kodem?
A co do kodu twojej strony to tragedia o której wołalem do Boga w pierwszym zdaniu.

Jak da się zalogować to zapodaj konto testowe.
Strarus
KOD:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <title>Komentarze v3</title>
  6. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />
  7. <meta name="Keywords" content="komentarze" />
  8. <meta name="description" content="System komentarzy oparty o MySQL" />
  9. <link rel="stylesheet" type="text/css" href="style.css" />
  10.      <script type="text/javascript">
  11. function hl(t,c) {
  12.   if(c) {
  13.       t.style.border='1px solid lightgreen';
  14.   } else {
  15.       t.style.border="1px solid steelblue";
  16.   }
  17. }
  18. </script>
  19. </head>
  20. <body>
  21. <?php if (isset($_GET['add'])):
  22. ?>
  23.  
  24. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  25. <center><table border="0" class="tabelka">
  26. <tr>
  27.  <td>
  28.   Nick:
  29.  </td>
  30.  <td>
  31.   <input class="name" type="text" name="nick" style="width: 100px;" onmouseover="hl(this,true)" onmouseout="hl(this,false)" maxlength="12"/>
  32.  </td>
  33. </tr>
  34. <tr>
  35.  <td>
  36.  Wpisz tutaj swój komentarz:
  37.  </td>
  38.  <td>
  39.   <textarea name="content" class="content" onmouseover="hl(this,true)" onmouseout="hl(this,false)" rows="3" cols="40"></textarea>
  40.  </td>
  41. </tr>
  42. <tr>
  43.  <td>
  44.   WWW: (Bez przedrostka <i>http://</i>)
  45.  </td>
  46.  <td>
  47.   <input class="stronka" type="text" name="www" onmouseover="hl(this,true)" onmouseout="hl(this,false)" style="width: 200px;" maxlength="32"/>
  48.  </td>
  49. </tr>
  50. <tr>
  51.  <td>
  52.   <input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>"/>
  53.  </td>
  54.  <td>
  55.   <input type="submit" value="AKCEPTUJ" />
  56.  </td>
  57. </tr>
  58. </table></center>
  59. </form>
  60. <?php else:
  61.  
  62.  $baza = @mysql_connect('**********', '*******', '********'); // Dane do połączenia z MySQL
  63.  if (!$baza) {
  64.    exit('<p>W tej chwili nie można nawiazać ' .
  65.        'połaczenia z serwerem bazy danych.</p>' );
  66.  }
  67.  if (!@mysql_select_db('*******')) { // Nazwa bazy danych
  68.    exit('<p>Nie można w tej chwili ' .
  69.        'zlokalizować bazy danych.</p>');
  70.  }
  71.  if (isset($_POST['content'])) {
  72.    $content = strip_tags($_POST['content']);
  73.    $ip = $_POST['ip'];
  74.    $nick = strip_tags($_POST['nick']);
  75.    $www = strip_tags($_POST['www']);
  76.    $data = date('d.m.Y H:i:s');
  77.    $sql = "INSERT INTO comments SET
  78.        content='$content',
  79.        www='$www',
  80.        ip='$ip',
  81.        nick='$nick',
  82.        data='$data'";
  83.    if (@mysql_query($sql)) {
  84.      echo '<p>Twój komentarz został dodany. Dziękuję!</p>';
  85.    } else {
  86.      echo '<p>Bład podczas dodawania komentarza: ' .
  87.          mysql_error() . '</p>';
  88.    }
  89.  }
  90.  if (isset($_GET['delete'])) {
  91.    $id = $_GET['delete'];
  92.    $sql = "DELETE FROM comments
  93.        WHERE id=$id";
  94.    if (@mysql_query($sql)) {
  95.      echo '<p>Komentarz został usunięty.</p>';
  96.    } else {
  97.      echo '<p>Bład podczas usuwania komentarza: ' .
  98.          mysql_error() . '</p>';
  99.    }
  100.  }
  101.  echo '<p>Aktualne komentarze:</p>';
  102.  
  103.  $result = @mysql_query('SELECT * FROM comments ORDER BY id DESC');
  104.  if (!$result) {
  105.    exit('<p> Bład podczas wykonywania zapytania: ' . mysql_error() . '</p>');
  106.  }
  107.  while ($row = mysql_fetch_array($result)) {
  108.    $date = $row['data'];
  109.    $nick = $row['nick'];
  110.    $www = $row['www'];
  111.    $ip = $row['ip'];
  112.    $id = $row['id'];
  113.    $content = $row['content'];
  114.    $explode = explode(".", $ip);
  115.    $ip = $explode[0].".".$explode[1].".".$explode[2].".xxx";
  116.  
  117.    session_start();
  118.    if($_SESSION['zalogowany']) {
  119.   $usun =  '<a href="' . $_SERVER['PHP_SELF'] .'?delete=' . $id . '"><img border="0" class="left" src="delete.png" alt="Usuń!" /></a>';
  120. }
  121. else {
  122.  
  123. $usun = '';
  124.  
  125. }
  126.     echo '<center><table class="comment3">
  127. <tr>
  128. <td><font class="nick"><b>Dodane przez: </b>' . $nick . '</font></font><font class="date"><b>Dnia: </b><i>' . $date . '</i></font></td>
  129. </tr>
  130. </table>
  131. <table class="coment">
  132. <tr>
  133. <td><font class="nick"><b>Komentarz:&nbsp</b></font><font class="comments_news">' . $content . '</font></td>
  134. </tr>
  135. </table>
  136. <table class="coment2">
  137. <tr>
  138. <td><font class="www"><b>www: </b><a target="_blank" href=" . $www . ">' . $www . '</a></font><font class="ip"><b>IP: </b>' . $ip . '</font></td>
  139. </tr>
  140. </table>' . $usun . '<br /><br /></center>';
  141.  }
  142.  
  143.  
  144. endif;
  145. ?>
  146. <br /><br /><p><a href="<?php $_SERVER['PHP_SELF']; ?>?add=1"><img border="0" src="add.png" alt="Dodaj!" /></a></p>
  147. <?php
  148. if($_SESSION['zalogowany']) {
  149.   echo  '<a class="strona" href="logout.php"><img border="0" src="logout.png" alt="Wyloguj!" />Wyloguj!</a>';
  150. }
  151. else {
  152.  
  153. echo '<a class="strona" href="login.php"><img border="0" src="login.png" alt="Zaloguj!" />Zaloguj!</a>';
  154.  
  155. }
  156.  
  157.  
  158. ?>
  159. </body>
  160. </html>


To nie jest panel, tylko możliwość usuwania haha.gif Hasło: passwd
phpion
Po kiego ci logowanie skoro i tak można usunąć wpis bez logowania? :|
Strarus
W sensie, że przez phpMyAdmin??
phpion
Cytat(Strarus @ 12.12.2008, 12:10:04 ) *
W sensie, że przez phpMyAdmin??

http://www.comments.yoyo.pl/index.php?delete=1
Nie chce mi się szukać konkretnych ID do usunięcia ale po kodzie widać, że nie sprawdzasz zalogowania przed usunięciem.

//Edit:
Właśnie wywaliłem ci wszystkie komentarze. Bez logowania. Jak?
http://www.comments.yoyo.pl/index.php?delete=1%20OR%201=1
wookieb
Kod php kolejna tragedia.
Nawet nie wiem czy ci zadziała session_start().
A dlaczego? To sobie już poszukaj w manualu. Ocena 2/10 za wygląd formularza do komentowania.

Ja rozumie dobre chęci, ale jeżeli potrzebujesz pochwały to pochwała od siebie samego powinna ci wystarczyć. Jeżeli coś będzie naprawdę dobre to cię pochwali ktoś z zewnątrz.

Mały faq na twoje przypuszczalne pytania:
1). Co jest źle?
Napewno wywal logowanie, i popraw wcięcia w kodzie
2) Co jeszcze?
Wszystko
3) Dlaczego wszystko?
Bo jesteśmy w erze programowania projektowego a programowanie strukturalne jest głównie do ćwiczeń i tego się trzymajmy
Strarus
@phpion czyli muszę dać na POST usuwanie?
phpion
Cytat(Strarus @ 12.12.2008, 12:20:04 ) *
@phpion czyli muszę dać na POST usuwanie?

Musisz poczytać o bezpieczeństwie (szczególnie: SQL Injection) oraz wykorzystać logowanie (sprawdzenie, czy user jest zalogowany) przy usuwaniu komentarzy.
Strarus
Jeszcze jedno: coś mi nie działa to usuwanie? Na cba działało a tu nie? Zero zmian kodu, a nie działa? Po prostu nie znajduje ID. Jak to załatwić?
mike
1. Nie ma tu nic do oceny. Przenoszę wątek na Przedszkole.
2. Proszę nadać mu inny tytuł.
Strarus
cześć:)
Chciałbym abyście ocenili mój systemik komentarzy po drobnej modernizacji smile.gif

http://strarus.cba.pl/index.php

Hasło: passwd

Proszę o ocenę:
a) Wyglądu strony
cool.gif Bezpieczeństwa strony [tzn. możliwość manipulowania komentarzami bez zalogowania]
c) Możliwości i funkcjonalności

Liczę na Wasze opinie i rady odnośnie tego co powinienem dodać, ująć, ulepszyć haha.gif

ref
nospor
yyyy, a co to za logowanie tylko hasłem? A gdzie login? Jak sobie wyobrażasz konta uzytkowników?

Kolejna sprawa: mozna wstrzyknac kod js (dalem alert(2)) przez co bezpieczenstwo tego skryptu mozna do kosza wyrzucic.

Po tych kwiatkach nie chce mi sie juz nic sprawdzac
Strarus
tak ,zauważyłem komunikat "2" smile.gif jak mogę zabezpieczyć skrypt przed takim czymś?? używam przecież funkcji strip_tags do każdego z pól ? ap ropo logowania myślałem na logowaniem z bazą tzw. loginy i hasła były by przechowywane w bazie danych smile.gif

PS. Ty to zrobiłeś przez panel edycji posta chyba... a tam specjalnie zostawiłem pole content bez strip_tags aby można potem w razie kradzieży skryptu komuś namieszać na stronie haha.gif
nospor
Cytat
PS. Ty to zrobiłeś przez panel edycji posta chyba... a tam specjalnie zostawiłem pole content bez strip_tags aby można potem w razie kradzieży skryptu komuś namieszać na stronie
Ales namieszal... normalnie brak slow... tongue.gif
Nie ma to jak logiczne myslenie: dodanie zabezpiecze, ale edycji już nie. Przeciez nikt przy zdrowych zmyslach nie hakuje podczas edycji....
Strarus
czemu namieszałem?? a inne aspekty mojego skryptu??
nospor
Cytat
czemu namieszałem??

Przeciez sam napisales:
Cytat
aby można potem w razie kradzieży skryptu komuś namieszać na stronie

No i mowie: to komuś namieszasz takim kodem. Zamiast mysleniem o mieszaniu, zajmij sie lepiej mysleniem o bezpieczenstwie twojego skryptu. Szukaniem naiwniakow co bedą chcieli "ukraść" ci skrypt bedziesz sie martwil za pare lat winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.