Pisanie własnego, najprostszego CMS

Pisanie własnego, najprostszego CMS
mpaw
  • Rejestracja:około 9 lat
  • Ostatnio:13 dni
  • Postów:530
0

Dzień dobry.

Napisałem dodatek do skryptu forum phpBB. Teraz chcę uruchomić analogiczną funkcjonalność we własnym CMS. Problem w tym, że nie wiem jakiej technologii użyć przy pisaniu takowego (czy gołe php + MySQL, czy jakiś framework etc.). Nie znam też standardów bezpieczeństwa i ergonomii i ekonomii skryptów. W phpBB posty są pisane tekstowo, a po wysłaniu ich, są zamienianie na XML i zapisywane w bazie. Podczas odczytu z powrotem są zamieniane na tekst z przetworzeniem BBCode'ów. Co należy wiedzieć przy tworzeniu takiego CMS? Bo napisać, żeby działało to chyba dam radę, ale co z bezpieczeństwem i szybkością działania? Jaka technologia?

Dzięki
M.


That's all folks ;)
edytowany 2x, ostatnio: mpaw
SH
SH
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • Postów:69
0

W każdy środowisku i każdym języku kusi, zamiast poznawać złożony projekt (np gotowy CMS), często znaczny czas wejścia - "napisze swój, będzie lepszy" 1)

No nie będzie. Na lepszy by była szansa, gdyby głęboko poznać ze 2-3 istotne na ryku itd, być dobrym analitykiem, dobrym programistą . I kółko się zamyka

Wydaje się, ze w PHP już są wszelkie możliwe CMS/ frameworki/ itd. W jednych jest więcej "ryby" (Wordpress), w innych "wędki" (Drupal), praktycznie zawsze da się coś wybrać

  1. jest psychologicznie prawdą, że poczatkujących akurat przeraża wejście w coś gotowego, nauczenie się itd...
edytowany 3x, ostatnio: Stój Halina
mpaw
Fajny nick. Znam jeszcze "Pradziadek przy Saniach", "Równo z Górki", "Duchy w Grupie" :)
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 14 godzin
  • Postów:3457
5

Zbudowanie od zera CMSa to kupa roboty i za pewne długo nie wyjdzie Ci nic podobnego funkcjonalnością i bezpieczeństwem względem istniejących. Skoro napisałeś dodatek do phpBB to może dostosuj go do Wordpressa, Jumla, Drupal.
Będziesz miał wtedy potencjalnie większą liczbę odbiorców oprogramowania.

mpaw
  • Rejestracja:około 9 lat
  • Ostatnio:13 dni
  • Postów:530
0

@jurek1980: Dzięki, ale czy nie ma ryzyka, że jak użyję gotowca to mi o wiele łatwiej shackują stronę? :(


That's all folks ;)
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 14 godzin
  • Postów:3457
3

Raczej napisanie czegoś bezpiecznego od zera jest trudniejsze.

mpaw
Kody publicznych CMSów są znane publicznie, własny CMS znałbym tylko ja...
LibrarlaN
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • Postów:4
0

@mpaw: Więcej ryzyka, że chackują ci stronę, jeżeli będziesz używał własnego kodu, niż gotowca, który piszą już od 5+ lat kupa ludzi :)

mpaw
No nie wiem, kod jest publiczny, mój znałbym tylko ja...
.andy
@mpaw: takie security by obsecurity? To się nie uda. Jeżeli kod jest rozwijany, błędy są poprawiane a ty aktualizujesz serwis, to małe prawdopodobieństwo. Wiadomo zawsze się znajdzie ktoś, kto znajdzie lukę przed autorami i ją wykorzysta, jednak to samo może się zadziać w przypadku zamkniętego softu.
katakrowa
To chyba bardziej złożone. Choć sam świadom jestem dziur w swoich CMS (łatamy je na bieżąco) to nigdy włamu nie miałem natomiast do stronek na WordPress włamy są regularne po każdej zapomnianej aktualizacji. Najstarsze do dziś działające strony na naszym CMS mają już po 14 lat i ciągle działają - więcej powiem ciągle są w nich dziury o których wiemy. Poza tym pojęcie "włamu" też jest szerokie.
.andy
@katakrowa: bo WP jest popularny i boty skanują ciągle sieć, znajdą podatny system i pewnie leci exploit - stąd taki szybki włam. Jednak security by obsecurity, to złe podejście...
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 14 godzin
  • Postów:3457
3

No dobrze a jak to Twoja strona tylko to po co Ci CMS? Nie prościej zrobić coś w HTML +PHP czy w oparciu o jakieś Django czy Laravel jak będziesz miał mieć logowanie np.

mpaw
  • Rejestracja:około 9 lat
  • Ostatnio:13 dni
  • Postów:530
1

@jurek1980: no właśnie chodzi mi o najprostszy CMS, bez żadnych wtyczek etc. Po prostu strona, z możliwością dodawania / edytowania postów + logowanie + wyszukiwarka

Tyle, że nie znam się na tych Laravelach itp. Nie wiem jaka technologia.


That's all folks ;)
edytowany 1x, ostatnio: mpaw
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 14 godzin
  • Lokalizacja:Poznań
  • Postów:8759
6

@mpaw: coś w tym jest.

O ile jestem prawie pewien, że efekt twojego pisania będzie gorszy (pod wieloma względami, w tym bezpieczeństwa) od jakiegoś sprawdzonego i znanego systemu, ale żeby radziecki hacker się włamał to będzie musiał się pobawić osobiście, automat raczej tutaj za wiele nie pomoże. A raczej nikt nie będzie tracić czasu na ręczny włam na stronę mechanika w Ustrzykach Górnych czy jakiejś firmy produkującej kapustę kiszoną.

Z drugiej strony - są narzędzia, ktore skanują wszystko co się da pod względem znanych luk bezpieczeństwa. I one doskonale wiedzą, jak się dobrać do Wordpressa czy innego znanego systemu.

Sam tak miałem 1 czy 2 razy - strona na WP postawiona i zostawiona samopas, po jakimś czasie została zaatakowana i to dość skutecznie. Nie było to nic ważnego, więc tragedia się nie stała, ale chcę pokazać, że jest to bardzo realny scenariusz.

Jeśli chcesz korzystać z WP czy innych gotowych rozwiązań to takie porady:

  • zanim to zainstalujesz to trochę poczytaj - jak to dobrze zainstalować, na co zwrócić uwagę
  • po instalacji zastosuj się do porad odnośnie zwiększenia bezpieczeństwa - usunąć zbędne moduły, zablokować niepotrzebne dostępy, zmienić hasła i loginy na nieoczywiste itp.
  • podczas posiadania - regularnie sprawdzaj, czy w logach nie ma czegoś podejrzanego
  • bądź na bieżąco, jak tylko pojawią się jakieś aktualizacje (zwłaszcza typu security lub bugfix) to je instaluj.

I tak nie będziesz mieć 100% pewności, zwłaszcza w przypadku tak zwanych zero day, ale znacząco zmniejszysz ryzyko wpadki.


edytowany 1x, ostatnio: cerrato
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 14 godzin
  • Postów:3457
2

To Jesse inaczej. Ile planujesz tam kontentu? Czy będziesz dodawać/modyfikować go 1 raz na tydzień ?
Poczytaj o wtyczkach do Laravel i zobacz ile ich jest https://laravel-news.com/laravel-cms-packages jak nie chcesz Wordpressa. A instalacja to tylko composer

mpaw
  • Rejestracja:około 9 lat
  • Ostatnio:13 dni
  • Postów:530
0

Dzięki.

Może źle się wyraziłem: chodzi mi o prosty system z

  • rejestracją
  • logowaniem
  • możliwością dodawania / usuwania / edycji / zapisywania w poczekalni Postów
  • dodawania działów
  • osadzania HTML
  • komentarzami
  • linkowania do fb/twitter

To wszystko

@jurek1980: To będzie raczej baza wiedzy.


That's all folks ;)
edytowany 5x, ostatnio: cerrato
N3
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 2 lata
  • Postów:84
0

Widzę to tylko jako projekt do nauki dla OP'a. Z brakiem podstawowej wiedzy, rzucanie się na budowanie CMS'a do zastosowań komercyjnych nie ma racji bytu - szkoda czasu.

mpaw napisał(a):

@jurek1980: Dzięki, ale czy nie ma ryzyka, że jak użyję gotowca to mi o wiele łatwiej shackują stronę? :(

Możesz zrobić własną kłódkę do zabezpieczenia drzwi, pytanie czy będzie ona lepsza od tych dostępnych na rynku.

mpaw
  • Rejestracja:około 9 lat
  • Ostatnio:13 dni
  • Postów:530
0
N3 napisał(a):

Z brakiem podstawowej wiedzy, rzucanie się na budowanie CMS'a do zastosowań komercyjnych

No właśnie po to założyłem ten temat. Jakie technologie i co must know.


That's all folks ;)
SH
SH
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • Postów:69
0
mpaw napisał(a):

To będzie raczej baza wiedzy.

Jak baza wiedzy - baza wiedzy zakłada nie tylko podłużne sortowanie w dziedzinie czasu, ale linkowanie we wszystkich przekrojach, "poprzecznie" czy "gwiaździście".
Filozofia Wiki jest tu bardzo dobra. Z lekkich Wiki kiedyś pozytywnie używaliśmy Docuwiki, wdrożenie w godzinę (a dokładniej to kwadrans) i potem tylko tworzenie artykułów.

mpaw napisał(a):
  • osadzania HTML

Nie wiesz czego chcesz. Po pierwsze podnosisz poziom ryzyka BARDZO. Po drugie zabijasz edycję przez zwykłych ludzi
Wszelkie "bazy wiedzy" bazują na uproszczonym języku, np Wikimarkup czy markdown

N3 napisał(a):

Widzę to tylko jako projekt do nauki dla OP'a. Z brakiem podstawowej wiedzy,

Coraz bardziej się wydaje, że nie tylko programistycznej, ale w pracy z założeniami, wymaganiami

Pora dać pointę:
Weź coś gotowego, a jak w ogóle masz nadzieję programować,** zrobić plugin** , jeśli życie wskaże potrzebę.

edytowany 2x, ostatnio: Stój Halina
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 14 godzin
  • Lokalizacja:Poznań
  • Postów:8759
2

Możesz zrobić własną kłódkę do zabezpieczenia drzwi, pytanie czy będzie ona lepsza od tych dostępnych na rynku.

To nie co końca tak. Raczej bym tu porównał do własnego zamka, który działa inaczej niż te dostępne w sprzedaży. Przychodzi złodziej, widzi otwór w drzwiach, próbuje standardowych wytrychów i sposobow, ale one nie działają.

Problemem może być to, że tworca zamka mógł coś przeoczyć/o czymś nie pomyśleć i o ile rzeczywiście standardowym wytrychem niczego nie zrobisz, ale wystarczy mocniej kopnąć drzwi i zamek odpadnie - bo wszystko jest mocowane z jednej strony na jedną śrubkę ;)

Jakie technologie i co must know.

Tutaj właściwie dowolna technologia się nada, zrobisz to w gołym PHP, HTML, CSS i js. To nie technologia jest ważna, tylko umiejętności. Jakbym dał ci narzędzia do wymiany rozrządu w silniku 5l V8 to raczej tematu nie ogarniesz, chociaż będziesz miał komplet narzędzi.


Freja Draco
Freja Draco
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
3
LibrarlaN napisał(a):

@mpaw: Więcej ryzyka, że chackują ci stronę, jeżeli będziesz używał własnego kodu, niż gotowca, który piszą już od 5+ lat kupa ludzi :)

Polemizowałabym. W tych robionych przez kupę ludzi systemach (np WP) ciągle jednak znajdują nowe błędy i wtedy jest pisk, że trzeba natychmiast aktualizować. I faktycznie trzeba, bo jak system popularny, to kupa robotów szuka w nich podatności (co widać chociażby w logach) i nie jest żadną rzadkością znaleźć zhakowany WP.

Z drugiej strony, jak masz własny silnik i nie jest on jakoś tragicznie zrobiony, to:

  • Nie ma na niego gotowych exploitów, którymi masowo testuje się strony www.
  • Żeby ktoś ci się włamał, musiałby to zrobić intencjonalnie i mieć coś akurat do twojej konkretnej strony. Przestępcom się to kompletnie nie opłaca, ew. jakiemuś dowcipnisiowi mogłoby się chcieć.

Z drugiej strony o pisanie własnego CMS-a do faktycznego użytku dla ludzi można się pokusić, jak masz już jakieś doświadczenie. Jeśli zamierzasz się dopiero uczyć tematu, to wyjdzie ci pewnie pojazd eksperymentalny z wszelkimi chorobami wieku dziecięcego i problemami w użytkowaniu. Ale pocieszę, że twój kolejny CMS zapewne będzie już lepszy :)

mpaw napisał(a):

No właśnie po to założyłem ten temat. Jakie technologie i co must know.

Sanityzacja danych.


edytowany 2x, ostatnio: cerrato
katakrowa
  • Rejestracja:około 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
6
mpaw napisał(a):

Dzięki.

Może źle się wyraziłem: chodzi mi o prosty system z

  • rejestracją
  • logowaniem
  • możliwością dodawania / usuwania / edycji / zapisywania w poczekalni Postów
  • dodawania działów
  • osadzania HTML
  • komentarzami
  • linkowania do fb/twitter

chodzi mi o prosty system z ...

Niestety magiczne zaklęcia w programowaniu tak nie działają.
Użycie słowa "prosty" nie zmienia złożoności zagadnienia z którym chcesz się zmierzyć.

Pewne zagadnienia wymagają minimalnej ale jednak profesjonalnej wiedzy aby spełniały zwoje zadania. Jak tego zabranie to później możemy spotkać "proste serwisy" z "prostym logowaniem" po stronie JavaScript z hasłem trzymanym w skrypcie, a dumny ze swojego działa autor nawet nie rozumie jak bardzo bez sensu rzecz stworzył.


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
edytowany 3x, ostatnio: katakrowa
CH
W ogłoszeniach mnie smieszy jak ktos jest biedakiem i ma 100 zl a chce zeby mu zrobic cos za 1500 i pisze, ze szukam kogos kto zrobi mi prosta modyfikacje :) i mysli ze jak napisze slowo "prosta" to z automatu bedzie taniej.
LukeJL
jak ktoś "jest biedakiem i ma 100 zl" to powinien skorzystać z darmowych rozwiązań albo gotowych rozwiązań(np. SaaSów) za <=100zł, a nie szukać wykonawcy-freelancera. Trochę jak na zasadzie, że jak masz 10zł, to kupujesz kilka piw, a nie tequillę.
HA
  • Rejestracja:około 6 lat
  • Ostatnio:około 22 godziny
  • Postów:1006
0

Jak to ma być do nauki to bym kupił kurs z PHP na Udemy i pisał w gołym PHP. Tak jak pisał @katakrowa to wbrew pozorom dość złożony projekt bo bardzo przekrojowy i żeby to zrobić dobrze trzeba sporo wiedzieć/umieć, ale kto nie napisał prostego CMS na plikach z jakimś security by obscurity niech pierwszy rzuci kamieniem. Do nauki takie projekty są bardzo fajne, zwłaszcza jak przepisujesz je kilka razy. Frameworków na Twoim poziomie bym unikał bo będziesz programował na zasadzie copy&paste i zadawał 1000 banalnych pytań na forum.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)