Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Piórko CMS
Forum PHP.pl > Inne > Oceny
ZeTu
Witam
Wykonałem CMS'a i prosiłbym o jego ocenę, jest to mój pierwszy CMS przy pomocy MySQL.
Może szablony zrobiłem takie nie zbyt ładne, ale to tylko prezentacja demo CMS'a.
Demo: http://cms.karol-drag.eu/demo_v1/
Ten CMS, zajmuje tylko 142KB (bez szablonów), a jego funkcje to:
  • Edycja strony głównej
  • Dodawanie, edytowanie i usuwanie podstron
  • Dodawanie, edytowanie i usuwanie linków w menu
  • Formularz kontaktowy
  • Możliwość dodania własnego:
    • Logo
    • Favicon
    • Zrzut ekranu (który jest widoczny, np po wrzuceniu linku na facebook'a)
    • Szablonu
    • Dodatkowo można dodać własne pola w <head></head>
  • Dodałem jeszcze stronkę z nowościami.
Demo: http://cms.karol-drag.eu/demo_v1/
askone
Wszystko fajnie, ale skoro piszesz że szablon zbudowałeś tylko na potrzeby demo to co niby mamy oceniać? Może udostępnisz jakieś konto demo admina abyśmy mogli zajrzeć "do środka"

Pozdrawiam
ZeTu
Wystarczyło wejść na stronke, której link podałem, to byś wiedział, że jest tam podany login i hasło. Albo po prostu weszłeś na stronke a nie czytałeś co tam jest napisane.
nospor
ałć.... Zetu mam dla Ciebie złą wiadomość. Na ten twój panel admina można wejść bez znajomości loginu i hasła :/ Ja rozumiem, że chciałeś to mieć lekkie jak piórko, ale podstawowe zabezpieczenia to wypadałoby wprowadzić.

O samym cms: nie podoba mi się. Tworzę nową podstrone i nie mam wpływu na jej adres. Ty mi sam przypisujesz adres jako kolejny numer porządkowy :/
ZeTu
No to jak mam zabezpieczyć?
nospor
Poczytaj o sqlinjection
ZeTu
Wyczytałem na jednej stronie, że takie coś może zapobiec włamaniom. Czy na pewno jest to skuteczny sposób?
  1. if (!ereg('^\d+$', $id))
  2. {
  3. // obsługa niepoprawnych danych
  4. }
nospor
Wrzucasz kawałek kodu, ktory nie wiesz co robi. Ten kawałek kody sprawdza czy dane id to liczba czy nie. Jak to ma sie do hasla i loginu? Nijak.
Poczytaj o sqlinjection. Pełno tego w necie, pełno na naszym forum.
ZeTu
A przy użyciu "mysql_real_escape_string"?
nospor
zdecydowanie cieplej, jakies 90stopni.
ZeTu
Czy chodzi o taki kod?
nospor
htmlspecialchars( addslashes - jest totalnie zbędne
ZeTu
A teraz ?
skowron-line
Cytat(ZeTu @ 25.01.2012, 17:56:22 ) *

Teraz to błysnąłeś
Cytat
This function requires PostgreSQL 7.2 or later.
znasz odrobinę angielski questionmark.gif

Zacznij czytać co jest napisane w manualu a nie na głupa będziesz wpisywał funkcje i pytał czy to zadziała.
Poczytaj co jest źródłem problemu i jak temu zaradzić w temacie o sqlinjection jest napisane jak się przed tym zabezpieczyć
ZeTu
No to jak mam to zrobić?
skowron-line
Cytat(ZeTu @ 25.01.2012, 18:02:16 ) *
No to jak mam to zrobić?

http://forum.php.pl/index.php?showtopic=23258 przeczytaj i się dowiesz.
ZeTu
czytałem, ale pierwszy komentarz nie zbyt zadowala i dlatego nie wiem, czy to co opisuje autor postu jest prawidłowe.
IceManSpy
A przeczytałeś trochę więcej niż 1 stronę?

Co się dowiedziałeś o sqlinjection? Jak na razie, to widać tylko lenistwo.
ZeTu
Przeczytałem ok. 12 stron.
Sqlinjection zagląda nam do MySQL i wyciąga dane, można też usuwać i zmieniać dane w MySQL, czyli włamywanie się do bazy po przez zwykły formularz który nie zamienia ' i " na znaki tylko odczytuje je jako fragment kodu w php np. gdy w formularzu dopiszemy taki fragment
  1. x';DROP TABLE uzytkownicy; SELECT '1
Czyli w ttym przypadku usunie tabele o nazwie uzytkownicy. Dobrze myśle?

A więc czy powinienem użyć
  1. $text = htmlspecialchars($text, ENT_QUOTES);
i
  1. $text = mysql_real_escape_string($text);
Czy jeszcze to nie to?
IceManSpy
htmlspecialchars wystarczy.
ZeTu
Aha i po prostu zanim zapiszę coś lub wyświetlę z MySQL mam użyć tej funkcji?
np.
  1. $text=pokarz['1'];
  2. $text = htmlspecialchars_decode($text, ENT_QUOTES);
  3. echo'$text';

A z zapisem
  1. $text=chop($_POST["tresc"]);
  2. $text = htmlspecialchars($text, ENT_QUOTES);
  3. $pytamy = "UPDATE tabela SET tresc = '$text' WHERE id = '$id'";
  4. mysql_query($pytamy);

Ok już zrobiłem
nospor
Że zetu gada głupoty to rozumiem (jest początkujący), ale że IceManSpy ...

htmlspiecialchars służy zupełnie innym celom! Do escapwania danych dla mysql ma sie używać mysql_real_escape_string - tyle w temacie!

Cytat
Ok już zrobiłem
Jak mogłem się zalogować bez hasła tak nadal mogę.
IceManSpy
Cytat(nospor @ 26.01.2012, 07:33:43 ) *
Że zetu gada głupoty to rozumiem, ale że IceManSpy ...

Wstyd sad.gif wstydnis.gif
ZeTu
Aj bo dałem wszędzie, ale w formularzu logowania zapomniałem sad.gif
Czyli np. tak mam to zrobić
  1. $dane = "SELECT ID FROM baza WHERE kategoria='".mysql_real_escape_string($kategoria_get)."'";
albo tak?
  1. $iduzytkownika = mysql_real_escape_string($_POST['iduzytkownika']);

nospor
pola liczbowe wystarczy ze zrzutujesz na int:

$pole = (int)$pole;
I już. Do pól tekstowych mysql_real_escape_string
ZeTu
No ok, czyli mogę użyć do pól tekstowych ten drugi kod, który podałem?
nospor
Jak ktos ci poda złe rozwiązanie, to bez zastanowienia wprowadzasz je w zycie.
Jak ja ci mówie od miesiąca o mysql_real_escape_string to milion razy się pytasz czy masz go użyc czy nie....
ZeTu
No nie, ja się pytam czy w taki sposób mam go użyć czy w inny.
nospor
Jakby było źle to bym wyraźnie to zaznaczył.

Cytat
ja się pytam czy w taki sposób mam go użyć czy w inny.
A ja tylko mowie, że jak ci wcześniej podano złą funkcje to od razu w kodzie pozmieniałeś bez wiekszego dopytywania
ZeTu
Napisałeś
Cytat(nospor @ 25.01.2012, 17:38:21 ) *
zdecydowanie cieplej, jakies 90stopni.
I nie wiedziałem co dalej robć, a później napisano mi:
Cytat(IceManSpy @ 25.01.2012, 20:45:20 ) *
htmlspecialchars wystarczy.
No i nie wiedziałem jak zrobić to się zapytałem, a że nikt nie odpisywał, to po prostu zmieniłem w kodzie.
No to jak ma to wyglądać?
nospor
...
tak:
$pole = mysql_real_escape_string($_POST['pole']);
ShadowD
Już ktoś coś popsuł, przyznać sięexclamation.gif


Cytat
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'zetu'@'localhost' (using password: NO) in /home/zetu/domains/karol-drag.eu/public_html/cms/demo_v1/admin/panel.php on line 11

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/zetu/domains/karol-drag.eu/public_html/cms/demo_v1/admin/panel.php on line 11

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'zetu'@'localhost' (using password: NO) in /home/zetu/domains/karol-drag.eu/public_html/cms/demo_v1/admin/panel.php on line 12

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/zetu/domains/karol-drag.eu/public_html/cms/demo_v1/admin/panel.php on line 12
ZeTu
Właśnie miałem to wrzucić. Po prostu to jest linia z tym co miałem wpisać:
  1. $login = mysql_real_escape_string($_POST['login']);
  2. $pass = mysql_real_escape_string(md5($_POST['pass']));
nospor
zanim wykonasz escapowanie to musisz ustanowic poprawne połączenie do bazy. Masz takowe? Pokaz cały kod.

$pass = mysql_real_escape_string(md5($_POST['pass']));
coś co przeleci przez md5 nie musisz escapowac, bo md5 nie zawiera niebezpiecznych znaków
ZeTu
Cytat(nospor @ 26.01.2012, 14:06:29 ) *
...musisz ustanowic poprawne połączenie do bazy...

Po prostu include z danymi do bazy miałem poniżej, i nie zauważyłem tego.
A jeszcze jedno, czyli teraz takie coś mogę usunąć z kodu?
  1. $login = htmlspecialchars($login, ENT_QUOTES); albo $login = htmlspecialchars_decode($login, ENT_QUOTES);
  2. $login = preg_replace('@<script[^>]*?>.*?</script>@si', '', $login);
ShadowD
Heh, już z 5 raz podchodzę do tej stronki z chęcią oceny, zawsze ktoś coś popsuje zanim się zaloguję! haha.gif

Miły Panie ZeTu w sieci jest tyle poradników i tematów na forach, nawet na tym już nie jeden, anie dwa się przewinęły, więc chyba czas wziąć się i poszukać jak powinno być to zapisane..
ZeTu
A jak teraz wygląda to wszystko? Czy teraz CMS jest bezpieczny?

Możecie sprawdzić czy teraz jest bezpieczny?
!*!
To ma mało co z bezpiecznym skryptem wspólnego, pomimo że nie mam wglądu w kod, widać że nie jest to najwyższych lotów. Np. jak wpiszę http://cms.karol-drag.eu/demo_v1/cokolwiek/index.html to chyba powinien być jakiś błąd?

Poza tym, nie nazwałbym tego CMS. Ot zwykły skrypt operaujący na zmiennych GET, takie coś robi się na równi z hello world.

Aby zasługiwało to na CMS, musiałby być jakiś przejrzysty ruting, oddzielenie kodu od prezentacji i użycie PDO do obsługi bazy danych.
nospor
Cytat
Aby zasługiwało to na CMS, musiałby być jakiś przejrzysty ruting, oddzielenie kodu od prezentacji i użycie PDO do obsługi bazy danych.
Sratata tongue.gif
CMS to cms, a uzywanie PDO czy oddzielenie kodu od prezentacji nie ma tu nic do gadania. Klienta, który używa CMS, guzik obchodzi czy ktoś oddziela kod od prezentacji czy używa PDO. Nie myl pojęć.
!*!
Czyli
  1. if($_GET['page'])
  2. {
  3. include $_GET['page'].'.txt';
  4. }


I wrzucanie plików txt przez formularz, to też jest CMS? wink.gif
nospor
Mowie jedynie, że jak coś nie używa sytemu szablonów oraz nie używa PDO to bez żadnego problemu może być dobrym CMSem.
Czytaj ze zrozumieniem tongue.gif
rafio
Cytat(!*! @ 7.02.2012, 10:13:55 ) *
Czyli
  1. if($_GET['page'])
  2. {
  3. include $_GET['page'].'.txt';
  4. }


I wrzucanie plików txt przez formularz, to też jest CMS? ;)



Jak zabezpieczysz ten kod i dasz właścicielowi strony narzędzia do zarządzania treścią to tak, to będzie CMS.
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.