ZeTu
25.01.2012, 00:42:01
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
25.01.2012, 07:44:40
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
25.01.2012, 08:29:02
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
25.01.2012, 08:37:38
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
25.01.2012, 15:55:46
No to jak mam zabezpieczyć?
nospor
25.01.2012, 17:01:16
Poczytaj o sqlinjection
ZeTu
25.01.2012, 17:12:43
Wyczytałem na jednej stronie, że takie coś może zapobiec włamaniom. Czy na pewno jest to skuteczny sposób?
{
// obsługa niepoprawnych danych
}
nospor
25.01.2012, 17:14:07
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
25.01.2012, 17:37:38
A przy użyciu "mysql_real_escape_string"?
nospor
25.01.2012, 17:38:21
zdecydowanie cieplej, jakies 90stopni.
ZeTu
25.01.2012, 17:43:13
nospor
25.01.2012, 17:47:05
htmlspecialchars( addslashes - jest totalnie zbędne
ZeTu
25.01.2012, 17:56:22
skowron-line
25.01.2012, 18:00:38
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

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
25.01.2012, 18:02:16
No to jak mam to zrobić?
skowron-line
25.01.2012, 18:05:38
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
25.01.2012, 18:08:58
czytałem, ale pierwszy komentarz nie zbyt zadowala i dlatego nie wiem, czy to co opisuje autor postu jest prawidłowe.
IceManSpy
25.01.2012, 19:56:01
A przeczytałeś trochę więcej niż 1 stronę?
Co się dowiedziałeś o sqlinjection? Jak na razie, to widać tylko lenistwo.
ZeTu
25.01.2012, 20:40:11
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
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ć
i
Czy jeszcze to nie to?
IceManSpy
25.01.2012, 20:45:20
htmlspecialchars wystarczy.
ZeTu
25.01.2012, 20:49:35
Aha i po prostu zanim zapiszę coś lub wyświetlę z MySQL mam użyć tej funkcji?
np.
$text=pokarz['1'];
$text = htmlspecialchars_decode($text, ENT_QUOTES);
A z zapisem
$text=chop($_POST["tresc"]); $pytamy = "UPDATE tabela SET tresc = '$text' WHERE id = '$id'";
Ok już zrobiłem
nospor
26.01.2012, 07:33:43
Ż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
26.01.2012, 09:33:25
Cytat(nospor @ 26.01.2012, 07:33:43 )

Że zetu gada głupoty to rozumiem, ale że IceManSpy ...
Wstyd
ZeTu
26.01.2012, 13:23:42
Aj bo dałem wszędzie, ale w formularzu logowania zapomniałem

Czyli np. tak mam to zrobić
albo tak?
nospor
26.01.2012, 13:27:15
pola liczbowe wystarczy ze zrzutujesz na int:
$pole = (int)$pole;
I już. Do pól tekstowych mysql_real_escape_string
ZeTu
26.01.2012, 13:29:58
No ok, czyli mogę użyć do pól tekstowych ten drugi kod, który podałem?
nospor
26.01.2012, 13:33:18
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
26.01.2012, 13:35:44
No nie, ja się pytam czy w taki sposób mam go użyć czy w inny.
nospor
26.01.2012, 13:40:04
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
26.01.2012, 13:47:34
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
26.01.2012, 13:49:12
...
tak:
$pole = mysql_real_escape_string($_POST['pole']);
ShadowD
26.01.2012, 14:02:14
Już ktoś coś popsuł, przyznać się
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
26.01.2012, 14:04:19
Właśnie miałem to wrzucić. Po prostu to jest linia z tym co miałem wpisać:
nospor
26.01.2012, 14:06:29
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
26.01.2012, 14:09:39
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?
$login = htmlspecialchars($login, ENT_QUOTES
); albo
$login = htmlspecialchars_decode
($login, ENT_QUOTES
); $login = preg_replace('@<script[^>]*?>.*?</script>@si', '', $login);
ShadowD
26.01.2012, 14:57:51
Heh, już z 5 raz podchodzę do tej stronki z chęcią oceny, zawsze ktoś coś popsuje zanim się zaloguję!
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
28.01.2012, 20:19:28
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
6.02.2012, 13:47:56
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

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
if($_GET['page'])
{
include $_GET['page'].'.txt';
}
I wrzucanie plików txt przez formularz, to też jest CMS?
nospor
7.02.2012, 10:59:36
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
rafio
7.02.2012, 19:18:57
Cytat(!*! @ 7.02.2012, 10:13:55 )

Czyli
if($_GET['page'])
{
include $_GET['page'].'.txt';
}
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.